[성현모] DB Connection 수정

This commit is contained in:
SHM
2025-04-22 14:47:12 +09:00
parent bf5c87ad34
commit 6a3c10c958
3 changed files with 97 additions and 80 deletions

View File

@ -1,11 +1,14 @@
using DB.HubXDB;
using HubX.Library.Config; using HubX.Library.Config;
using HubX.Library.Socket.Session; using HubX.Library.Socket.Session;
using HubX.Server; using HubX.Server;
using HubX.Server.Services; using HubX.Server.Services;
using HubX.Server.TaskManager; using HubX.Server.TaskManager;
using Microsoft.EntityFrameworkCore;
using System.Net; using System.Net;
using System.Net.Sockets; using System.Net.Sockets;
using SystemX.Core.Communication; using SystemX.Core.Communication;
using SystemX.Core.DB;
using SystemX.Core.Services; using SystemX.Core.Services;
string configDir = @"../Config"; string configDir = @"../Config";
@ -49,6 +52,8 @@ else
return; return;
} }
builder.Services.AddDbContext<HubXContext>();
var app = builder.Build(); var app = builder.Build();
//read api config and set //read api config and set

View File

@ -3,7 +3,9 @@ using HubX.Library.Enums;
using HubX.Library.Http.Packet; using HubX.Library.Http.Packet;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Identity.Client.Extensions.Msal; using Microsoft.Identity.Client.Extensions.Msal;
using System;
using System.Data; using System.Data;
using System.Xml;
using SystemX.Core.DB; using SystemX.Core.DB;
namespace HubX.Server.Services namespace HubX.Server.Services
@ -11,10 +13,12 @@ namespace HubX.Server.Services
public class UniqueKeyService public class UniqueKeyService
{ {
private readonly EFCoreService _efCoreService; private readonly EFCoreService _efCoreService;
private readonly IServiceScopeFactory _scopeFactory;
public UniqueKeyService(EFCoreService efCoreService) public UniqueKeyService(EFCoreService efCoreService, IServiceScopeFactory scopeFactory)
{ {
_efCoreService = efCoreService; _efCoreService = efCoreService;
_scopeFactory = scopeFactory;
} }
public async Task<Response_InsertUniqueKy> Request_InsertUniqueKey(Request_InsertUniqueKey request) public async Task<Response_InsertUniqueKy> Request_InsertUniqueKey(Request_InsertUniqueKey request)
@ -26,44 +30,46 @@ namespace HubX.Server.Services
response.Identity = request.Identity; response.Identity = request.Identity;
bool transactionResult = true; bool transactionResult = true;
var context = _efCoreService.GetDBContext<HubXContext>(); using (var scope = _scopeFactory.CreateScope())
if (context != null)
{ {
var data = context.TStorages.Where(x=>x.CIdentity == request.Identity); var context = scope.ServiceProvider.GetRequiredService<HubXContext>();
if (data?.Count() > 0) if (context != null)
{ {
Log4net.WriteLine($"Exist Unique Key", LogType.Error); var data = context.TStorages.AsNoTracking().Where(x => x.CIdentity == request.Identity).ToList();
response.Result = "Exist Unique Key"; if (data?.Count() > 0)
}
else
{
var storage = new TStorage
{ {
CIdentity = request.Identity, Log4net.WriteLine($"Exist Unique Key", LogType.Error);
CData1 = request.Data1, response.Result = "Exist Unique Key";
CData2 = request.Data2,
CData3 = request.Data3,
CData4 = request.Data4,
CData5 = request.Data5,
CDateTime = DateTime.Now
};
using (var transaction = await context.CreateTransactionAsync())
{
await context.AddAsync(storage);
transactionResult = await context.CloseTransactionAsync(transaction);
}
//db error
if (transactionResult == false)
{
response.Result = EnumResult.Failed.ToString();
Log4net.WriteLine($"Transaction Error", LogType.Error);
} }
else else
{ {
Log4net.WriteLine($"Transaction Success", LogType.DB); var storage = new TStorage
{
CIdentity = request.Identity,
CData1 = request.Data1,
CData2 = request.Data2,
CData3 = request.Data3,
CData4 = request.Data4,
CData5 = request.Data5,
CDateTime = DateTime.Now
};
using (var transaction = await context.CreateTransactionAsync())
{
await context.AddAsync(storage);
transactionResult = await context.CloseTransactionAsync(transaction);
}
//db error
if (transactionResult == false)
{
response.Result = EnumResult.Failed.ToString();
Log4net.WriteLine($"Transaction Error", LogType.Error);
}
else
{
Log4net.WriteLine($"Transaction Success", LogType.DB);
}
} }
} }
} }
@ -79,30 +85,32 @@ namespace HubX.Server.Services
if (request != null) if (request != null)
{ {
response.Identity = request.Identity; response.Identity = request.Identity;
using (var scope = _scopeFactory.CreateScope())
var context = _efCoreService.GetDBContext<HubXContext>();
if (context != null)
{ {
try var context = scope.ServiceProvider.GetRequiredService<HubXContext>();
if (context != null)
{ {
using (var transaction = await context.CreateTransactionAsync(IsolationLevel.ReadUncommitted)) try
{ {
var data = context.TStorages.AsNoTracking().First(x=>x.CIdentity == request.Identity); using (var transaction = await context.CreateTransactionAsync(IsolationLevel.ReadUncommitted))
await context.CloseTransactionAsync(transaction);
if(data != null)
{ {
response.Data1 = data.CData1; var data = context.TStorages.AsNoTracking().ToList().First(x => x.CIdentity == request.Identity);
response.Data2 = data.CData2; await context.CloseTransactionAsync(transaction);
response.Data3 = data.CData3; if (data != null)
response.Data4 = data.CData4; {
response.Data5 = data.CData5; response.Data1 = data.CData1;
response.Data2 = data.CData2;
response.Data3 = data.CData3;
response.Data4 = data.CData4;
response.Data5 = data.CData5;
}
} }
} }
} catch (Exception e)
catch (Exception e) {
{ Log4net.WriteLine($"Select Unique Key Transaction Error", LogType.Error);
Log4net.WriteLine($"Select Unique Key Transaction Error", LogType.Error); Log4net.WriteLine(e);
Log4net.WriteLine(e); }
} }
} }
} }
@ -119,35 +127,39 @@ namespace HubX.Server.Services
response.Identity = request.Identity; response.Identity = request.Identity;
bool transactionResult = true; bool transactionResult = true;
var context = _efCoreService.GetDBContext<HubXContext>();
if (context != null)
{
var selected = context.TStorages.First(x => x.CIdentity == request.Identity);
if (selected != null)
{
selected.CData1 = request.Data1;
selected.CData2 = request.Data2;
selected.CData3 = request.Data3;
selected.CData4 = request.Data4;
selected.CData5 = request.Data5;
using (var transaction = await context.CreateTransactionAsync()) using (var scope = _scopeFactory.CreateScope())
{
var context = scope.ServiceProvider.GetRequiredService<HubXContext>();
if (context != null)
{
var selected = context.TStorages.First(x => x.CIdentity == request.Identity);
if (selected != null)
{ {
context.Update(selected); selected.CData1 = request.Data1;
transactionResult = await context.CloseTransactionAsync(transaction); selected.CData2 = request.Data2;
selected.CData3 = request.Data3;
selected.CData4 = request.Data4;
selected.CData5 = request.Data5;
using (var transaction = await context.CreateTransactionAsync())
{
context.Update(selected);
transactionResult = await context.CloseTransactionAsync(transaction);
}
} }
} }
}
//db error //db error
if (transactionResult == false) if (transactionResult == false)
{ {
response.Result = EnumResult.Failed.ToString(); response.Result = EnumResult.Failed.ToString();
Log4net.WriteLine($"Transaction Error", LogType.Error); Log4net.WriteLine($"Transaction Error", LogType.Error);
} }
else else
{ {
Log4net.WriteLine($"Transaction Success", LogType.DB); Log4net.WriteLine($"Transaction Success", LogType.DB);
}
} }
} }