diff --git a/server/AyaNova/biz/Search.cs b/server/AyaNova/biz/Search.cs index dc39d49b..63474d09 100644 --- a/server/AyaNova/biz/Search.cs +++ b/server/AyaNova/biz/Search.cs @@ -681,67 +681,6 @@ namespace AyaNova.Biz #region Breaker - // //Class to hold relevant translation data for breaking text - // public class TranslationWordBreakingData - // { - // public bool CJKIndex { get; set; } - // public List StopWords { get; set; } - // public TranslationWordBreakingData() - // { - // CJKIndex = false; - // StopWords = new List(); - // } - // } - - // private static Dictionary translationWordBreakingDataCache = new Dictionary(); - - // //called at startup to populate cache - //WAS GOING TO ADD THIS IN RESPONSE TO AN ISSUE WITH EXCEPTION ATTEMPTING TO ADD ALREADY EXISTING DICTIONARY ID 1, BUT IT NEVER HAPPENED AGAIN, SO :SHRUGEMOJI: - //IF IT DOES, MAKE THIS CODE AND POPULATE IT AT SERVER BOOT AND SHOULD BE ADEQUATE - //OR GO NUTS WITH A FULL MEMORY CACHE: https://docs.microsoft.com/en-us/aspnet/core/performance/caching/memory?view=aspnetcore-3.1 - // internal static async Task CacheAllTranslationWordBreakingData(){ - // //iterate all Translations, cache the word break data - // l = await ct.Translation - // .AsNoTracking() - // .OrderBy(z => z.Name) - // .Select(z => new NameIdItem() - // { - // Id = z.Id, - // Name = z.Name - // }).ToListAsync(); - // TranslationWordBreakingDataCache.Add(TranslationId, await GetTranslationSearchDataAsync(TranslationId)); - // } - // internal static async Task GetTranslationSearchDataAsync(long translationId, AyContext ct = null) - // { - // TranslationWordBreakingData LSD = new TranslationWordBreakingData(); - // if (ct == null) - // ct = ServiceProviderProvider.DBContext; - // //Get stopwords - // //Validate translation id, if not right then use default instead - // var Param = new List(); - // translationId = await TranslationBiz.ReturnSpecifiedTranslationIdIfExistsOrDefaultTranslationId(translationId, ct); - // Param.Add("StopWords1"); - // Param.Add("StopWords2"); - // Param.Add("StopWords3"); - // Param.Add("StopWords4"); - // Param.Add("StopWords5"); - // Param.Add("StopWords6"); - // Param.Add("StopWords7"); - // var Stops = await TranslationBiz.GetSubsetStaticAsync(Param, translationId); - - // foreach (KeyValuePair kvp in Stops) - // { - // //Each stopwords translation key is a space delimited list of words and in the case of an empty local string (i.e. StopWords7) it's value is a single question mark - // if (kvp.Value != "?") - // { - // LSD.StopWords.AddRange(kvp.Value.Split(" ")); - // } - // } - - // LSD.CJKIndex = await TranslationBiz.GetCJKIndexAsync(translationId, ct); - // return LSD; - // } - public enum TokenTypes { Nothing, Separator, CJK, Latin }; diff --git a/server/AyaNova/biz/SearchTranslationWordBreakDataCache.cs b/server/AyaNova/biz/SearchTranslationWordBreakDataCache.cs index 718a55da..ae2b7312 100644 --- a/server/AyaNova/biz/SearchTranslationWordBreakDataCache.cs +++ b/server/AyaNova/biz/SearchTranslationWordBreakDataCache.cs @@ -31,30 +31,32 @@ namespace AyaNova.Biz internal static async Task GetTranslationSearchDataAsync(long translationId) { TranslationWordBreakingData LSD = new TranslationWordBreakingData(); - AyContext ct = ServiceProviderProvider.DBContext; - //Get stopwords - //Validate translation id, if not right then use default instead - var Param = new List(); - translationId = await TranslationBiz.ReturnSpecifiedTranslationIdIfExistsOrDefaultTranslationId(translationId, ct); - Param.Add("StopWords1"); - Param.Add("StopWords2"); - Param.Add("StopWords3"); - Param.Add("StopWords4"); - Param.Add("StopWords5"); - Param.Add("StopWords6"); - Param.Add("StopWords7"); - var Stops = await TranslationBiz.GetSubsetStaticAsync(Param, translationId); - - foreach (KeyValuePair kvp in Stops) + using (AyContext ct = ServiceProviderProvider.DBContext) { - //Each stopwords translation key is a space delimited list of words and in the case of an empty local string (i.e. StopWords7) it's value is a single question mark - if (kvp.Value != "?") - { - LSD.StopWords.AddRange(kvp.Value.Split(" ")); - } - } + //Get stopwords + //Validate translation id, if not right then use default instead + var Param = new List(); + translationId = await TranslationBiz.ReturnSpecifiedTranslationIdIfExistsOrDefaultTranslationId(translationId, ct); + Param.Add("StopWords1"); + Param.Add("StopWords2"); + Param.Add("StopWords3"); + Param.Add("StopWords4"); + Param.Add("StopWords5"); + Param.Add("StopWords6"); + Param.Add("StopWords7"); + var Stops = await TranslationBiz.GetSubsetStaticAsync(Param, translationId); - LSD.CJKIndex = await TranslationBiz.GetCJKIndexAsync(translationId, ct); + foreach (KeyValuePair kvp in Stops) + { + //Each stopwords translation key is a space delimited list of words and in the case of an empty local string (i.e. StopWords7) it's value is a single question mark + if (kvp.Value != "?") + { + LSD.StopWords.AddRange(kvp.Value.Split(" ")); + } + } + + LSD.CJKIndex = await TranslationBiz.GetCJKIndexAsync(translationId, ct); + } return LSD; } diff --git a/server/AyaNova/biz/TranslationBiz.cs b/server/AyaNova/biz/TranslationBiz.cs index 10d98dbe..d9390021 100644 --- a/server/AyaNova/biz/TranslationBiz.cs +++ b/server/AyaNova/biz/TranslationBiz.cs @@ -164,20 +164,19 @@ namespace AyaNova.Biz #if (DEBUG) TrackRequestedKey(param); #endif - AyContext ct = ServiceProviderProvider.DBContext; - - if (!await ct.Translation.AnyAsync(e => e.Id == translationId)) - translationId = ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID; - var ret = await ct.TranslationItem.Where(z => z.TranslationId == translationId && param.Contains(z.Key)).AsNoTracking().ToDictionaryAsync(z => z.Key, z => z.Display); - return ret; + using (AyContext ct = ServiceProviderProvider.DBContext) + { + if (!await ct.Translation.AnyAsync(e => e.Id == translationId)) + translationId = ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID; + var ret = await ct.TranslationItem.Where(z => z.TranslationId == translationId && param.Contains(z.Key)).AsNoTracking().ToDictionaryAsync(z => z.Key, z => z.Display); + return ret; + } } //Get the CJKIndex value for the translation specified - internal static async Task GetCJKIndexAsync(long translationId, AyContext ct = null) + internal static async Task GetCJKIndexAsync(long translationId, AyContext ct) { - if (ct == null) - ct = ServiceProviderProvider.DBContext; var ret = await ct.Translation.Where(z => z.Id == translationId).AsNoTracking().Select(z => z.CjkIndex).SingleOrDefaultAsync(); return ret; } @@ -195,15 +194,15 @@ namespace AyaNova.Biz #if (DEBUG) TrackRequestedKey(key); #endif - AyContext ct = ServiceProviderProvider.DBContext; - return await ct.TranslationItem.Where(z => z.TranslationId == ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID && z.Key == key).Select(z => z.Display).AsNoTracking().FirstOrDefaultAsync(); + using (AyContext ct = ServiceProviderProvider.DBContext) + return await ct.TranslationItem.Where(z => z.TranslationId == ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID && z.Key == key).Select(z => z.Display).AsNoTracking().FirstOrDefaultAsync(); } //Get all stock keys that are valid (used for key coverage reporting) internal static async Task> GetKeyListAsync() { - AyContext ct = ServiceProviderProvider.DBContext; - return await ct.TranslationItem.Where(z => z.TranslationId == 1).OrderBy(z => z.Key).Select(z => z.Key).AsNoTracking().ToListAsync(); + using (AyContext ct = ServiceProviderProvider.DBContext) + return await ct.TranslationItem.Where(z => z.TranslationId == 1).OrderBy(z => z.Key).Select(z => z.Key).AsNoTracking().ToListAsync(); } @@ -392,15 +391,14 @@ namespace AyaNova.Biz return v.Id; } - public static async Task TranslationNameToIdStaticAsync(string translationName, AyContext ct = null) + public static async Task TranslationNameToIdStaticAsync(string translationName) { - if (ct == null) + using (AyContext ct = ServiceProviderProvider.DBContext) { - ct = ServiceProviderProvider.DBContext; + var v = await ct.Translation.AsNoTracking().FirstOrDefaultAsync(z => z.Name == translationName); + if (v == null) return ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID; + return v.Id; } - var v = await ct.Translation.AsNoTracking().FirstOrDefaultAsync(z => z.Name == translationName); - if (v == null) return ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID; - return v.Id; } public async Task TranslationExistsAsync(string translationName) diff --git a/server/AyaNova/biz/UserBiz.cs b/server/AyaNova/biz/UserBiz.cs index 82e2bd47..51897a4b 100644 --- a/server/AyaNova/biz/UserBiz.cs +++ b/server/AyaNova/biz/UserBiz.cs @@ -31,12 +31,13 @@ namespace AyaNova.Biz //This is where active tech license consumers are accounted for internal static async Task ActiveCountAsync() { - var ct = ServiceProviderProvider.DBContext; - var ret = await ct.User.Where(z => z.Active == true && ( - z.UserType == UserType.Service || - z.UserType == UserType.ServiceContractor)).LongCountAsync(); - - return ret; + using (AyContext ct = ServiceProviderProvider.DBContext) + { + var ret = await ct.User.AsNoTracking().Where(z => z.Active == true && ( + z.UserType == UserType.Service || + z.UserType == UserType.ServiceContractor)).LongCountAsync(); + return ret; + } } internal static UserBiz GetBiz(AyContext ct, Microsoft.AspNetCore.Http.HttpContext httpContext = null) @@ -593,14 +594,14 @@ namespace AyaNova.Biz idList = ((JArray)jobData["idList"]).ToObject>(); else idList = await ct.Widget.Select(z => z.Id).ToListAsync(); - bool SaveIt = false; + bool SaveIt = false; foreach (long id in idList) { try { - SaveIt = false; - ClearErrors(); - var o = await GetAsync(id, false); + SaveIt = false; + ClearErrors(); + var o = await GetAsync(id, false); switch (job.SubType) { case JobSubType.TagAddAny: