diff --git a/server/AyaNova/biz/CustomerBiz.cs b/server/AyaNova/biz/CustomerBiz.cs index 248c424e..07758679 100644 --- a/server/AyaNova/biz/CustomerBiz.cs +++ b/server/AyaNova/biz/CustomerBiz.cs @@ -98,7 +98,7 @@ namespace AyaNova.Biz // internal async Task GetAsync(long id, bool logTheGetEvent = true) { - var ret = await ct.Customer.SingleOrDefaultAsync(z => z.Id == id); + var ret = await ct.Customer.AsNoTracking().SingleOrDefaultAsync(z => z.Id == id); if (logTheGetEvent && ret != null) await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, id, BizType, AyaEvent.Retrieved), ct); return ret; @@ -109,20 +109,18 @@ namespace AyaNova.Biz // internal async Task PutAsync(Customer putObject) { - Customer dbObject = await ct.Customer.SingleOrDefaultAsync(z => z.Id == putObject.Id); + Customer dbObject = await GetAsync(putObject.Id, false); if (dbObject == null) { AddError(ApiErrorCode.NOT_FOUND, "id"); return null; } - Customer SnapshotOfOriginalDBObj = new Customer(); - CopyObject.Copy(dbObject, SnapshotOfOriginalDBObj); - CopyObject.Copy(putObject, dbObject, "Id"); - dbObject.Tags = TagBiz.NormalizeTags(dbObject.Tags); - dbObject.CustomFields = JsonUtil.CompactJson(dbObject.CustomFields); - ct.Entry(dbObject).OriginalValues["Concurrency"] = putObject.Concurrency; - await ValidateAsync(dbObject, SnapshotOfOriginalDBObj); + + putObject.Tags = TagBiz.NormalizeTags(putObject.Tags); + putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields); + await ValidateAsync(putObject, dbObject); if (HasErrors) return null; + ct.Replace(dbObject, putObject); try { await ct.SaveChangesAsync(); @@ -136,9 +134,9 @@ namespace AyaNova.Biz return null; } await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, dbObject.Id, BizType, AyaEvent.Modified), ct); - await SearchIndexAsync(dbObject, false); - await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, dbObject.Tags, SnapshotOfOriginalDBObj.Tags); - await HandlePotentialNotificationEvent(AyaEvent.Modified, dbObject, SnapshotOfOriginalDBObj); + await SearchIndexAsync(putObject, false); + await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags); + await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject); return dbObject; } @@ -151,7 +149,7 @@ namespace AyaNova.Biz { try { - Customer dbObject = await ct.Customer.SingleOrDefaultAsync(z => z.Id == id); + Customer dbObject = await GetAsync(id, false); if (dbObject == null) { AddError(ApiErrorCode.NOT_FOUND); @@ -219,8 +217,8 @@ namespace AyaNova.Biz // private async Task SearchIndexAsync(Customer obj, bool isNew) { - var SearchParams = new Search.SearchIndexProcessObjectParameters(UserTranslationId, obj.Id, BizType); - DigestSearchText(obj,SearchParams); + var SearchParams = new Search.SearchIndexProcessObjectParameters(UserTranslationId, obj.Id, BizType); + DigestSearchText(obj, SearchParams); if (isNew) await Search.ProcessNewObjectKeywordsAsync(SearchParams); else @@ -229,9 +227,9 @@ namespace AyaNova.Biz public async Task GetSearchResultSummary(long id) { - var obj = await ct.Customer.SingleOrDefaultAsync(z => z.Id == id); + var obj = await GetAsync(id, false); var SearchParams = new Search.SearchIndexProcessObjectParameters(); - DigestSearchText(obj,SearchParams); + DigestSearchText(obj, SearchParams); return SearchParams; } @@ -263,7 +261,7 @@ namespace AyaNova.Biz .AddText(obj.Country) .AddText(obj.Latitude) .AddText(obj.Longitude) - .AddCustomFields(obj.CustomFields); + .AddCustomFields(obj.CustomFields); } //////////////////////////////////////////////////////////////////////////////////////////////// @@ -356,7 +354,7 @@ namespace AyaNova.Biz var batch = idList.Take(IReportAbleObject.REPORT_DATA_BATCH_SIZE); idList = idList.Skip(IReportAbleObject.REPORT_DATA_BATCH_SIZE).ToArray(); //query for this batch, comes back in db natural order unfortunately - var batchResults = await ct.Customer.Where(z => batch.Contains(z.Id)).ToArrayAsync(); + var batchResults = await ct.Customer.AsNoTracking().Where(z => batch.Contains(z.Id)).ToArrayAsync(); //order the results back into original var orderedList = from id in batch join z in batchResults on id equals z.Id select z; foreach (Customer w in orderedList) @@ -445,7 +443,7 @@ namespace AyaNova.Biz if (jobData.ContainsKey("idList")) idList = ((JArray)jobData["idList"]).ToObject>(); else - idList = await ct.Customer.Select(z => z.Id).ToListAsync(); + idList = await ct.Customer.AsNoTracking().Select(z => z.Id).ToListAsync(); bool SaveIt = false; foreach (long id in idList) { diff --git a/server/AyaNova/biz/PartAssemblyBiz.cs b/server/AyaNova/biz/PartAssemblyBiz.cs index 48a384e6..0b6ce081 100644 --- a/server/AyaNova/biz/PartAssemblyBiz.cs +++ b/server/AyaNova/biz/PartAssemblyBiz.cs @@ -127,9 +127,9 @@ namespace AyaNova.Biz putObject.Tags = TagBiz.NormalizeTags(putObject.Tags); putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields); - await ValidateAsync(putObject, dbObject); - ct.Replace(dbObject, putObject); + await ValidateAsync(putObject, dbObject); if (HasErrors) return null; + ct.Replace(dbObject, putObject); try { await ct.SaveChangesAsync(); @@ -143,7 +143,7 @@ namespace AyaNova.Biz return null; } await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, dbObject.Id, BizType, AyaEvent.Modified), ct); - await SearchIndexAsync(dbObject, false); + await SearchIndexAsync(putObject, false); await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags); await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject); return putObject;