diff --git a/Projects/HubX/DBPatch/sqlScripts/dacpac/HubX.DB.dacpac b/Projects/HubX/DBPatch/sqlScripts/dacpac/HubX.DB.dacpac index 3ee1bbe..a1bb94a 100644 Binary files a/Projects/HubX/DBPatch/sqlScripts/dacpac/HubX.DB.dacpac and b/Projects/HubX/DBPatch/sqlScripts/dacpac/HubX.DB.dacpac differ diff --git a/Projects/HubX/HubX.Server/Program.cs b/Projects/HubX/HubX.Server/Program.cs index bd3bbe9..b9ebe4d 100644 --- a/Projects/HubX/HubX.Server/Program.cs +++ b/Projects/HubX/HubX.Server/Program.cs @@ -1,11 +1,14 @@ +using DB.HubXDB; using HubX.Library.Config; using HubX.Library.Socket.Session; using HubX.Server; using HubX.Server.Services; using HubX.Server.TaskManager; +using Microsoft.EntityFrameworkCore; using System.Net; using System.Net.Sockets; using SystemX.Core.Communication; +using SystemX.Core.DB; using SystemX.Core.Services; string configDir = @"../Config"; @@ -49,6 +52,8 @@ else return; } +builder.Services.AddDbContext(); + var app = builder.Build(); //read api config and set diff --git a/Projects/HubX/HubX.Server/Services/UniqueKeyService.cs b/Projects/HubX/HubX.Server/Services/UniqueKeyService.cs index dd3ed19..61bd8f2 100644 --- a/Projects/HubX/HubX.Server/Services/UniqueKeyService.cs +++ b/Projects/HubX/HubX.Server/Services/UniqueKeyService.cs @@ -3,7 +3,9 @@ using HubX.Library.Enums; using HubX.Library.Http.Packet; using Microsoft.EntityFrameworkCore; using Microsoft.Identity.Client.Extensions.Msal; +using System; using System.Data; +using System.Xml; using SystemX.Core.DB; namespace HubX.Server.Services @@ -11,10 +13,12 @@ namespace HubX.Server.Services public class UniqueKeyService { private readonly EFCoreService _efCoreService; + private readonly IServiceScopeFactory _scopeFactory; - public UniqueKeyService(EFCoreService efCoreService) + public UniqueKeyService(EFCoreService efCoreService, IServiceScopeFactory scopeFactory) { _efCoreService = efCoreService; + _scopeFactory = scopeFactory; } public async Task Request_InsertUniqueKey(Request_InsertUniqueKey request) @@ -25,48 +29,50 @@ namespace HubX.Server.Services { response.Identity = request.Identity; - bool transactionResult = true; - var context = _efCoreService.GetDBContext(); - if (context != null) + bool transactionResult = true; + using (var scope = _scopeFactory.CreateScope()) { - var data = context.TStorages.Where(x=>x.CIdentity == request.Identity); - if (data?.Count() > 0) + var context = scope.ServiceProvider.GetRequiredService(); + if (context != null) { - Log4net.WriteLine($"Exist Unique Key", LogType.Error); - response.Result = "Exist Unique Key"; - } - else - { - var storage = new TStorage + var data = context.TStorages.AsNoTracking().Where(x => x.CIdentity == request.Identity).ToList(); + if (data?.Count() > 0) { - 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); + Log4net.WriteLine($"Exist Unique Key", LogType.Error); + response.Result = "Exist Unique Key"; } 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); + } } - } - } + } + } } return response; @@ -79,31 +85,33 @@ namespace HubX.Server.Services if (request != null) { response.Identity = request.Identity; - - var context = _efCoreService.GetDBContext(); - if (context != null) - { - try + using (var scope = _scopeFactory.CreateScope()) + { + var context = scope.ServiceProvider.GetRequiredService(); + if (context != null) { - using (var transaction = await context.CreateTransactionAsync(IsolationLevel.ReadUncommitted)) + try { - var data = context.TStorages.AsNoTracking().First(x=>x.CIdentity == request.Identity); - await context.CloseTransactionAsync(transaction); - if(data != null) + using (var transaction = await context.CreateTransactionAsync(IsolationLevel.ReadUncommitted)) { - response.Data1 = data.CData1; - response.Data2 = data.CData2; - response.Data3 = data.CData3; - response.Data4 = data.CData4; - response.Data5 = data.CData5; + var data = context.TStorages.AsNoTracking().ToList().First(x => x.CIdentity == request.Identity); + await context.CloseTransactionAsync(transaction); + if (data != null) + { + response.Data1 = data.CData1; + response.Data2 = data.CData2; + response.Data3 = data.CData3; + response.Data4 = data.CData4; + response.Data5 = data.CData5; + } } } + catch (Exception e) + { + Log4net.WriteLine($"Select Unique Key Transaction Error", LogType.Error); + Log4net.WriteLine(e); + } } - catch (Exception e) - { - Log4net.WriteLine($"Select Unique Key Transaction Error", LogType.Error); - Log4net.WriteLine(e); - } } } @@ -119,35 +127,39 @@ namespace HubX.Server.Services response.Identity = request.Identity; bool transactionResult = true; - var context = _efCoreService.GetDBContext(); - if (context != null) + + using (var scope = _scopeFactory.CreateScope()) { - var selected = context.TStorages.First(x => x.CIdentity == request.Identity); - if (selected != null) + var context = scope.ServiceProvider.GetRequiredService(); + if (context != 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()) + var selected = context.TStorages.First(x => x.CIdentity == request.Identity); + if (selected != null) { - context.Update(selected); - transactionResult = await context.CloseTransactionAsync(transaction); - } - } - } + selected.CData1 = request.Data1; + selected.CData2 = request.Data2; + selected.CData3 = request.Data3; + selected.CData4 = request.Data4; + selected.CData5 = request.Data5; - //db error - if (transactionResult == false) - { - response.Result = EnumResult.Failed.ToString(); - Log4net.WriteLine($"Transaction Error", LogType.Error); - } - else - { - Log4net.WriteLine($"Transaction Success", LogType.DB); + using (var transaction = await context.CreateTransactionAsync()) + { + context.Update(selected); + 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); + } } }