diff --git a/server/AyaNova/biz/UnitBiz.cs b/server/AyaNova/biz/UnitBiz.cs index c9ab57f0..03d5cf36 100644 --- a/server/AyaNova/biz/UnitBiz.cs +++ b/server/AyaNova/biz/UnitBiz.cs @@ -109,16 +109,16 @@ namespace AyaNova.Biz // internal async Task PutAsync(Unit putObject) { - var dbObject = await GetAsync(putObject.Id, false); + var dbObject = await GetAsync(putObject.Id, false); if (dbObject == null) { AddError(ApiErrorCode.NOT_FOUND, "id"); return null; } - + putObject.Tags = TagBiz.NormalizeTags(putObject.Tags); putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields); - await ValidateAsync(putObject, dbObject); + await ValidateAsync(putObject, dbObject); if (HasErrors) return null; ct.Replace(dbObject, putObject); try @@ -381,7 +381,7 @@ namespace AyaNova.Biz if (jobData.ContainsKey("idList")) idList = ((JArray)jobData["idList"]).ToObject>(); else - idList = await ct.Unit.Select(z => z.Id).ToListAsync(); + idList = await ct.Unit.AsNoTracking().Select(z => z.Id).ToListAsync(); bool SaveIt = false; foreach (long id in idList) { diff --git a/server/AyaNova/biz/UnitModelBiz.cs b/server/AyaNova/biz/UnitModelBiz.cs index e08f36b1..ab0dae85 100644 --- a/server/AyaNova/biz/UnitModelBiz.cs +++ b/server/AyaNova/biz/UnitModelBiz.cs @@ -65,13 +65,13 @@ namespace AyaNova.Biz // internal async Task DuplicateAsync(long id) { - UnitModel dbObject = await GetAsync(id, false); + var dbObject = await GetAsync(id, false); if (dbObject == null) { AddError(ApiErrorCode.NOT_FOUND, "id"); return null; } - UnitModel newObject = new UnitModel(); + var newObject = new UnitModel(); CopyObject.Copy(dbObject, newObject, "Wiki"); string newUniqueModelNumber = string.Empty; bool NotUnique = true; @@ -98,7 +98,7 @@ namespace AyaNova.Biz // internal async Task GetAsync(long id, bool logTheGetEvent = true) { - var ret = await ct.UnitModel.SingleOrDefaultAsync(z => z.Id == id); + var ret = await ct.UnitModel.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,19 @@ namespace AyaNova.Biz // internal async Task PutAsync(UnitModel putObject) { - UnitModel dbObject = await ct.UnitModel.SingleOrDefaultAsync(z => z.Id == putObject.Id); + + var dbObject = await GetAsync(putObject.Id, false); if (dbObject == null) { AddError(ApiErrorCode.NOT_FOUND, "id"); return null; } - UnitModel SnapshotOfOriginalDBObj = new UnitModel(); - 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(); @@ -147,9 +146,9 @@ namespace AyaNova.Biz } 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; } @@ -162,7 +161,7 @@ namespace AyaNova.Biz { try { - UnitModel dbObject = await ct.UnitModel.SingleOrDefaultAsync(z => z.Id == id); + var dbObject = await GetAsync(id, false); if (dbObject == null) { AddError(ApiErrorCode.NOT_FOUND); @@ -207,7 +206,7 @@ namespace AyaNova.Biz public async Task GetSearchResultSummary(long id) { - var obj = await ct.UnitModel.SingleOrDefaultAsync(z => z.Id == id); + var obj = await GetAsync(id, false); var SearchParams = new Search.SearchIndexProcessObjectParameters(); DigestSearchText(obj, SearchParams); return SearchParams; @@ -278,7 +277,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.UnitModel.Where(z => batch.Contains(z.Id)).ToArrayAsync(); + var batchResults = await ct.UnitModel.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 (UnitModel w in orderedList) @@ -367,7 +366,7 @@ namespace AyaNova.Biz if (jobData.ContainsKey("idList")) idList = ((JArray)jobData["idList"]).ToObject>(); else - idList = await ct.UnitModel.Select(z => z.Id).ToListAsync(); + idList = await ct.UnitModel.AsNoTracking().Select(z => z.Id).ToListAsync(); bool SaveIt = false; foreach (long id in idList) { diff --git a/server/AyaNova/biz/VendorBiz.cs b/server/AyaNova/biz/VendorBiz.cs index e8472bda..f147f625 100644 --- a/server/AyaNova/biz/VendorBiz.cs +++ b/server/AyaNova/biz/VendorBiz.cs @@ -65,13 +65,13 @@ namespace AyaNova.Biz // internal async Task DuplicateAsync(long id) { - Vendor dbObject = await GetAsync(id, false); + var dbObject = await GetAsync(id, false); if (dbObject == null) { AddError(ApiErrorCode.NOT_FOUND, "id"); return null; } - Vendor newObject = new Vendor(); + var newObject = new Vendor(); CopyObject.Copy(dbObject, newObject, "Wiki"); string newUniqueName = string.Empty; bool NotUnique = true; @@ -98,7 +98,7 @@ namespace AyaNova.Biz // internal async Task GetAsync(long id, bool logTheGetEvent = true) { - var ret = await ct.Vendor.SingleOrDefaultAsync(z => z.Id == id); + var ret = await ct.Vendor.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(Vendor putObject) { - Vendor dbObject = await ct.Vendor.SingleOrDefaultAsync(z => z.Id == putObject.Id); + var dbObject = await GetAsync(putObject.Id, false); if (dbObject == null) { AddError(ApiErrorCode.NOT_FOUND, "id"); return null; } - Vendor SnapshotOfOriginalDBObj = new Vendor(); - 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 { - Vendor dbObject = await ct.Vendor.SingleOrDefaultAsync(z => z.Id == id); + Vendor dbObject = await GetAsync(id, false); if (dbObject == null) { AddError(ApiErrorCode.NOT_FOUND); @@ -195,7 +193,7 @@ namespace AyaNova.Biz public async Task GetSearchResultSummary(long id) { - var obj = await ct.Vendor.SingleOrDefaultAsync(z => z.Id == id); + var obj = await GetAsync(id, false); var SearchParams = new Search.SearchIndexProcessObjectParameters(); DigestSearchText(obj, SearchParams); return SearchParams; @@ -297,7 +295,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.Vendor.Where(z => batch.Contains(z.Id)).ToArrayAsync(); + var batchResults = await ct.Vendor.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 (Vendor w in orderedList) @@ -386,7 +384,7 @@ namespace AyaNova.Biz if (jobData.ContainsKey("idList")) idList = ((JArray)jobData["idList"]).ToObject>(); else - idList = await ct.Vendor.Select(z => z.Id).ToListAsync(); + idList = await ct.Vendor.AsNoTracking().Select(z => z.Id).ToListAsync(); bool SaveIt = false; foreach (long id in idList) { diff --git a/server/AyaNova/biz/WidgetBiz.cs b/server/AyaNova/biz/WidgetBiz.cs index 1680fed9..33115420 100644 --- a/server/AyaNova/biz/WidgetBiz.cs +++ b/server/AyaNova/biz/WidgetBiz.cs @@ -68,13 +68,13 @@ namespace AyaNova.Biz // internal async Task DuplicateAsync(long id) { - Widget dbObject = await GetAsync(id, false); + var dbObject = await GetAsync(id, false); if (dbObject == null) { AddError(ApiErrorCode.NOT_FOUND, "id"); return null; } - Widget newObject = new Widget(); + var newObject = new Widget(); CopyObject.Copy(dbObject, newObject, "Wiki,Serial"); string newUniqueName = string.Empty; bool NotUnique = true; @@ -101,7 +101,7 @@ namespace AyaNova.Biz // internal async Task GetAsync(long id, bool logTheGetEvent = true) { - var ret = await ct.Widget.SingleOrDefaultAsync(z => z.Id == id); + var ret = await ct.Widget.AsNoTracking().SingleOrDefaultAsync(z => z.Id == id); if (logTheGetEvent && ret != null) await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, id, BizType, AyaEvent.Retrieved), ct); return ret; @@ -112,20 +112,18 @@ namespace AyaNova.Biz // internal async Task PutAsync(Widget putObject) { - Widget dbObject = await ct.Widget.SingleOrDefaultAsync(z => z.Id == putObject.Id); + var dbObject = await GetAsync(putObject.Id, false); if (dbObject == null) { AddError(ApiErrorCode.NOT_FOUND, "id"); return null; } - Widget SnapshotOfOriginalDBObj = new Widget(); - CopyObject.Copy(dbObject, SnapshotOfOriginalDBObj); - CopyObject.Copy(putObject, dbObject, "Id");//can update serial - dbObject.Tags = TagBiz.NormalizeTags(dbObject.Tags); - dbObject.CustomFields = JsonUtil.CompactJson(dbObject.CustomFields); - ct.Entry(dbObject).OriginalValues["Concurrency"] = putObject.Concurrency; - await ValidateAsync(dbObject); + + putObject.Tags = TagBiz.NormalizeTags(putObject.Tags); + putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields); + await ValidateAsync(putObject); if (HasErrors) return null; + ct.Replace(dbObject, putObject); try { await ct.SaveChangesAsync(); @@ -139,9 +137,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; } @@ -154,7 +152,7 @@ namespace AyaNova.Biz { try { - Widget dbObject = await ct.Widget.SingleOrDefaultAsync(z => z.Id == id); + var dbObject = await GetAsync(id, false); if (dbObject == null) { AddError(ApiErrorCode.NOT_FOUND); @@ -219,7 +217,7 @@ namespace AyaNova.Biz public async Task GetSearchResultSummary(long id) { - var obj = await ct.Widget.SingleOrDefaultAsync(z => z.Id == id); + var obj = await GetAsync(id, false); var SearchParams = new Search.SearchIndexProcessObjectParameters(); DigestSearchText(obj, SearchParams); return SearchParams; @@ -319,7 +317,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.Widget.Where(z => batch.Contains(z.Id)).ToArrayAsync(); + var batchResults = await ct.Widget.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 (Widget w in orderedList) @@ -410,7 +408,7 @@ namespace AyaNova.Biz if (jobData.ContainsKey("idList")) idList = ((JArray)jobData["idList"]).ToObject>(); else - idList = await ct.Widget.Select(z => z.Id).ToListAsync(); + idList = await ct.Widget.AsNoTracking().Select(z => z.Id).ToListAsync(); bool SaveIt = false; foreach (long id in idList) {