This commit is contained in:
2021-01-15 01:28:56 +00:00
parent 0154cbe90c
commit f66bf4ecbc
4 changed files with 53 additions and 58 deletions

View File

@@ -109,16 +109,16 @@ namespace AyaNova.Biz
// //
internal async Task<Unit> PutAsync(Unit putObject) internal async Task<Unit> PutAsync(Unit putObject)
{ {
var dbObject = await GetAsync(putObject.Id, false); var dbObject = await GetAsync(putObject.Id, false);
if (dbObject == null) if (dbObject == null)
{ {
AddError(ApiErrorCode.NOT_FOUND, "id"); AddError(ApiErrorCode.NOT_FOUND, "id");
return null; return null;
} }
putObject.Tags = TagBiz.NormalizeTags(putObject.Tags); putObject.Tags = TagBiz.NormalizeTags(putObject.Tags);
putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields); putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields);
await ValidateAsync(putObject, dbObject); await ValidateAsync(putObject, dbObject);
if (HasErrors) return null; if (HasErrors) return null;
ct.Replace(dbObject, putObject); ct.Replace(dbObject, putObject);
try try
@@ -381,7 +381,7 @@ namespace AyaNova.Biz
if (jobData.ContainsKey("idList")) if (jobData.ContainsKey("idList"))
idList = ((JArray)jobData["idList"]).ToObject<List<long>>(); idList = ((JArray)jobData["idList"]).ToObject<List<long>>();
else else
idList = await ct.Unit.Select(z => z.Id).ToListAsync(); idList = await ct.Unit.AsNoTracking().Select(z => z.Id).ToListAsync();
bool SaveIt = false; bool SaveIt = false;
foreach (long id in idList) foreach (long id in idList)
{ {

View File

@@ -65,13 +65,13 @@ namespace AyaNova.Biz
// //
internal async Task<UnitModel> DuplicateAsync(long id) internal async Task<UnitModel> DuplicateAsync(long id)
{ {
UnitModel dbObject = await GetAsync(id, false); var dbObject = await GetAsync(id, false);
if (dbObject == null) if (dbObject == null)
{ {
AddError(ApiErrorCode.NOT_FOUND, "id"); AddError(ApiErrorCode.NOT_FOUND, "id");
return null; return null;
} }
UnitModel newObject = new UnitModel(); var newObject = new UnitModel();
CopyObject.Copy(dbObject, newObject, "Wiki"); CopyObject.Copy(dbObject, newObject, "Wiki");
string newUniqueModelNumber = string.Empty; string newUniqueModelNumber = string.Empty;
bool NotUnique = true; bool NotUnique = true;
@@ -98,7 +98,7 @@ namespace AyaNova.Biz
// //
internal async Task<UnitModel> GetAsync(long id, bool logTheGetEvent = true) internal async Task<UnitModel> 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) if (logTheGetEvent && ret != null)
await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, id, BizType, AyaEvent.Retrieved), ct); await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, id, BizType, AyaEvent.Retrieved), ct);
return ret; return ret;
@@ -109,20 +109,19 @@ namespace AyaNova.Biz
// //
internal async Task<UnitModel> PutAsync(UnitModel putObject) internal async Task<UnitModel> PutAsync(UnitModel putObject)
{ {
UnitModel dbObject = await ct.UnitModel.SingleOrDefaultAsync(z => z.Id == putObject.Id);
var dbObject = await GetAsync(putObject.Id, false);
if (dbObject == null) if (dbObject == null)
{ {
AddError(ApiErrorCode.NOT_FOUND, "id"); AddError(ApiErrorCode.NOT_FOUND, "id");
return null; return null;
} }
UnitModel SnapshotOfOriginalDBObj = new UnitModel();
CopyObject.Copy(dbObject, SnapshotOfOriginalDBObj); putObject.Tags = TagBiz.NormalizeTags(putObject.Tags);
CopyObject.Copy(putObject, dbObject, "Id"); putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields);
dbObject.Tags = TagBiz.NormalizeTags(dbObject.Tags); await ValidateAsync(putObject, dbObject);
dbObject.CustomFields = JsonUtil.CompactJson(dbObject.CustomFields);
ct.Entry(dbObject).OriginalValues["Concurrency"] = putObject.Concurrency;
await ValidateAsync(dbObject, SnapshotOfOriginalDBObj);
if (HasErrors) return null; if (HasErrors) return null;
ct.Replace(dbObject, putObject);
try try
{ {
await ct.SaveChangesAsync(); await ct.SaveChangesAsync();
@@ -147,9 +146,9 @@ namespace AyaNova.Biz
} }
await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, dbObject.Id, BizType, AyaEvent.Modified), ct); await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, dbObject.Id, BizType, AyaEvent.Modified), ct);
await SearchIndexAsync(dbObject, false); await SearchIndexAsync(putObject, false);
await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, dbObject.Tags, SnapshotOfOriginalDBObj.Tags); await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags);
await HandlePotentialNotificationEvent(AyaEvent.Modified, dbObject, SnapshotOfOriginalDBObj); await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject);
return dbObject; return dbObject;
} }
@@ -162,7 +161,7 @@ namespace AyaNova.Biz
{ {
try try
{ {
UnitModel dbObject = await ct.UnitModel.SingleOrDefaultAsync(z => z.Id == id); var dbObject = await GetAsync(id, false);
if (dbObject == null) if (dbObject == null)
{ {
AddError(ApiErrorCode.NOT_FOUND); AddError(ApiErrorCode.NOT_FOUND);
@@ -207,7 +206,7 @@ namespace AyaNova.Biz
public async Task<Search.SearchIndexProcessObjectParameters> GetSearchResultSummary(long id) public async Task<Search.SearchIndexProcessObjectParameters> GetSearchResultSummary(long id)
{ {
var obj = await ct.UnitModel.SingleOrDefaultAsync(z => z.Id == id); var obj = await GetAsync(id, false);
var SearchParams = new Search.SearchIndexProcessObjectParameters(); var SearchParams = new Search.SearchIndexProcessObjectParameters();
DigestSearchText(obj, SearchParams); DigestSearchText(obj, SearchParams);
return SearchParams; return SearchParams;
@@ -278,7 +277,7 @@ namespace AyaNova.Biz
var batch = idList.Take(IReportAbleObject.REPORT_DATA_BATCH_SIZE); var batch = idList.Take(IReportAbleObject.REPORT_DATA_BATCH_SIZE);
idList = idList.Skip(IReportAbleObject.REPORT_DATA_BATCH_SIZE).ToArray(); idList = idList.Skip(IReportAbleObject.REPORT_DATA_BATCH_SIZE).ToArray();
//query for this batch, comes back in db natural order unfortunately //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 //order the results back into original
var orderedList = from id in batch join z in batchResults on id equals z.Id select z; var orderedList = from id in batch join z in batchResults on id equals z.Id select z;
foreach (UnitModel w in orderedList) foreach (UnitModel w in orderedList)
@@ -367,7 +366,7 @@ namespace AyaNova.Biz
if (jobData.ContainsKey("idList")) if (jobData.ContainsKey("idList"))
idList = ((JArray)jobData["idList"]).ToObject<List<long>>(); idList = ((JArray)jobData["idList"]).ToObject<List<long>>();
else else
idList = await ct.UnitModel.Select(z => z.Id).ToListAsync(); idList = await ct.UnitModel.AsNoTracking().Select(z => z.Id).ToListAsync();
bool SaveIt = false; bool SaveIt = false;
foreach (long id in idList) foreach (long id in idList)
{ {

View File

@@ -65,13 +65,13 @@ namespace AyaNova.Biz
// //
internal async Task<Vendor> DuplicateAsync(long id) internal async Task<Vendor> DuplicateAsync(long id)
{ {
Vendor dbObject = await GetAsync(id, false); var dbObject = await GetAsync(id, false);
if (dbObject == null) if (dbObject == null)
{ {
AddError(ApiErrorCode.NOT_FOUND, "id"); AddError(ApiErrorCode.NOT_FOUND, "id");
return null; return null;
} }
Vendor newObject = new Vendor(); var newObject = new Vendor();
CopyObject.Copy(dbObject, newObject, "Wiki"); CopyObject.Copy(dbObject, newObject, "Wiki");
string newUniqueName = string.Empty; string newUniqueName = string.Empty;
bool NotUnique = true; bool NotUnique = true;
@@ -98,7 +98,7 @@ namespace AyaNova.Biz
// //
internal async Task<Vendor> GetAsync(long id, bool logTheGetEvent = true) internal async Task<Vendor> 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) if (logTheGetEvent && ret != null)
await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, id, BizType, AyaEvent.Retrieved), ct); await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, id, BizType, AyaEvent.Retrieved), ct);
return ret; return ret;
@@ -109,20 +109,18 @@ namespace AyaNova.Biz
// //
internal async Task<Vendor> PutAsync(Vendor putObject) internal async Task<Vendor> PutAsync(Vendor putObject)
{ {
Vendor dbObject = await ct.Vendor.SingleOrDefaultAsync(z => z.Id == putObject.Id); var dbObject = await GetAsync(putObject.Id, false);
if (dbObject == null) if (dbObject == null)
{ {
AddError(ApiErrorCode.NOT_FOUND, "id"); AddError(ApiErrorCode.NOT_FOUND, "id");
return null; return null;
} }
Vendor SnapshotOfOriginalDBObj = new Vendor();
CopyObject.Copy(dbObject, SnapshotOfOriginalDBObj); putObject.Tags = TagBiz.NormalizeTags(putObject.Tags);
CopyObject.Copy(putObject, dbObject, "Id"); putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields);
dbObject.Tags = TagBiz.NormalizeTags(dbObject.Tags); await ValidateAsync(putObject, dbObject);
dbObject.CustomFields = JsonUtil.CompactJson(dbObject.CustomFields);
ct.Entry(dbObject).OriginalValues["Concurrency"] = putObject.Concurrency;
await ValidateAsync(dbObject, SnapshotOfOriginalDBObj);
if (HasErrors) return null; if (HasErrors) return null;
ct.Replace(dbObject, putObject);
try try
{ {
await ct.SaveChangesAsync(); await ct.SaveChangesAsync();
@@ -136,9 +134,9 @@ namespace AyaNova.Biz
return null; return null;
} }
await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, dbObject.Id, BizType, AyaEvent.Modified), ct); await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, dbObject.Id, BizType, AyaEvent.Modified), ct);
await SearchIndexAsync(dbObject, false); await SearchIndexAsync(putObject, false);
await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, dbObject.Tags, SnapshotOfOriginalDBObj.Tags); await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags);
await HandlePotentialNotificationEvent(AyaEvent.Modified, dbObject, SnapshotOfOriginalDBObj); await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject);
return dbObject; return dbObject;
} }
@@ -151,7 +149,7 @@ namespace AyaNova.Biz
{ {
try try
{ {
Vendor dbObject = await ct.Vendor.SingleOrDefaultAsync(z => z.Id == id); Vendor dbObject = await GetAsync(id, false);
if (dbObject == null) if (dbObject == null)
{ {
AddError(ApiErrorCode.NOT_FOUND); AddError(ApiErrorCode.NOT_FOUND);
@@ -195,7 +193,7 @@ namespace AyaNova.Biz
public async Task<Search.SearchIndexProcessObjectParameters> GetSearchResultSummary(long id) public async Task<Search.SearchIndexProcessObjectParameters> GetSearchResultSummary(long id)
{ {
var obj = await ct.Vendor.SingleOrDefaultAsync(z => z.Id == id); var obj = await GetAsync(id, false);
var SearchParams = new Search.SearchIndexProcessObjectParameters(); var SearchParams = new Search.SearchIndexProcessObjectParameters();
DigestSearchText(obj, SearchParams); DigestSearchText(obj, SearchParams);
return SearchParams; return SearchParams;
@@ -297,7 +295,7 @@ namespace AyaNova.Biz
var batch = idList.Take(IReportAbleObject.REPORT_DATA_BATCH_SIZE); var batch = idList.Take(IReportAbleObject.REPORT_DATA_BATCH_SIZE);
idList = idList.Skip(IReportAbleObject.REPORT_DATA_BATCH_SIZE).ToArray(); idList = idList.Skip(IReportAbleObject.REPORT_DATA_BATCH_SIZE).ToArray();
//query for this batch, comes back in db natural order unfortunately //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 //order the results back into original
var orderedList = from id in batch join z in batchResults on id equals z.Id select z; var orderedList = from id in batch join z in batchResults on id equals z.Id select z;
foreach (Vendor w in orderedList) foreach (Vendor w in orderedList)
@@ -386,7 +384,7 @@ namespace AyaNova.Biz
if (jobData.ContainsKey("idList")) if (jobData.ContainsKey("idList"))
idList = ((JArray)jobData["idList"]).ToObject<List<long>>(); idList = ((JArray)jobData["idList"]).ToObject<List<long>>();
else else
idList = await ct.Vendor.Select(z => z.Id).ToListAsync(); idList = await ct.Vendor.AsNoTracking().Select(z => z.Id).ToListAsync();
bool SaveIt = false; bool SaveIt = false;
foreach (long id in idList) foreach (long id in idList)
{ {

View File

@@ -68,13 +68,13 @@ namespace AyaNova.Biz
// //
internal async Task<Widget> DuplicateAsync(long id) internal async Task<Widget> DuplicateAsync(long id)
{ {
Widget dbObject = await GetAsync(id, false); var dbObject = await GetAsync(id, false);
if (dbObject == null) if (dbObject == null)
{ {
AddError(ApiErrorCode.NOT_FOUND, "id"); AddError(ApiErrorCode.NOT_FOUND, "id");
return null; return null;
} }
Widget newObject = new Widget(); var newObject = new Widget();
CopyObject.Copy(dbObject, newObject, "Wiki,Serial"); CopyObject.Copy(dbObject, newObject, "Wiki,Serial");
string newUniqueName = string.Empty; string newUniqueName = string.Empty;
bool NotUnique = true; bool NotUnique = true;
@@ -101,7 +101,7 @@ namespace AyaNova.Biz
// //
internal async Task<Widget> GetAsync(long id, bool logTheGetEvent = true) internal async Task<Widget> 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) if (logTheGetEvent && ret != null)
await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, id, BizType, AyaEvent.Retrieved), ct); await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, id, BizType, AyaEvent.Retrieved), ct);
return ret; return ret;
@@ -112,20 +112,18 @@ namespace AyaNova.Biz
// //
internal async Task<Widget> PutAsync(Widget putObject) internal async Task<Widget> PutAsync(Widget putObject)
{ {
Widget dbObject = await ct.Widget.SingleOrDefaultAsync(z => z.Id == putObject.Id); var dbObject = await GetAsync(putObject.Id, false);
if (dbObject == null) if (dbObject == null)
{ {
AddError(ApiErrorCode.NOT_FOUND, "id"); AddError(ApiErrorCode.NOT_FOUND, "id");
return null; return null;
} }
Widget SnapshotOfOriginalDBObj = new Widget();
CopyObject.Copy(dbObject, SnapshotOfOriginalDBObj); putObject.Tags = TagBiz.NormalizeTags(putObject.Tags);
CopyObject.Copy(putObject, dbObject, "Id");//can update serial putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields);
dbObject.Tags = TagBiz.NormalizeTags(dbObject.Tags); await ValidateAsync(putObject);
dbObject.CustomFields = JsonUtil.CompactJson(dbObject.CustomFields);
ct.Entry(dbObject).OriginalValues["Concurrency"] = putObject.Concurrency;
await ValidateAsync(dbObject);
if (HasErrors) return null; if (HasErrors) return null;
ct.Replace(dbObject, putObject);
try try
{ {
await ct.SaveChangesAsync(); await ct.SaveChangesAsync();
@@ -139,9 +137,9 @@ namespace AyaNova.Biz
return null; return null;
} }
await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, dbObject.Id, BizType, AyaEvent.Modified), ct); await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, dbObject.Id, BizType, AyaEvent.Modified), ct);
await SearchIndexAsync(dbObject, false); await SearchIndexAsync(putObject, false);
await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, dbObject.Tags, SnapshotOfOriginalDBObj.Tags); await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags);
await HandlePotentialNotificationEvent(AyaEvent.Modified, dbObject, SnapshotOfOriginalDBObj); await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject);
return dbObject; return dbObject;
} }
@@ -154,7 +152,7 @@ namespace AyaNova.Biz
{ {
try try
{ {
Widget dbObject = await ct.Widget.SingleOrDefaultAsync(z => z.Id == id); var dbObject = await GetAsync(id, false);
if (dbObject == null) if (dbObject == null)
{ {
AddError(ApiErrorCode.NOT_FOUND); AddError(ApiErrorCode.NOT_FOUND);
@@ -219,7 +217,7 @@ namespace AyaNova.Biz
public async Task<Search.SearchIndexProcessObjectParameters> GetSearchResultSummary(long id) public async Task<Search.SearchIndexProcessObjectParameters> GetSearchResultSummary(long id)
{ {
var obj = await ct.Widget.SingleOrDefaultAsync(z => z.Id == id); var obj = await GetAsync(id, false);
var SearchParams = new Search.SearchIndexProcessObjectParameters(); var SearchParams = new Search.SearchIndexProcessObjectParameters();
DigestSearchText(obj, SearchParams); DigestSearchText(obj, SearchParams);
return SearchParams; return SearchParams;
@@ -319,7 +317,7 @@ namespace AyaNova.Biz
var batch = idList.Take(IReportAbleObject.REPORT_DATA_BATCH_SIZE); var batch = idList.Take(IReportAbleObject.REPORT_DATA_BATCH_SIZE);
idList = idList.Skip(IReportAbleObject.REPORT_DATA_BATCH_SIZE).ToArray(); idList = idList.Skip(IReportAbleObject.REPORT_DATA_BATCH_SIZE).ToArray();
//query for this batch, comes back in db natural order unfortunately //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 //order the results back into original
var orderedList = from id in batch join z in batchResults on id equals z.Id select z; var orderedList = from id in batch join z in batchResults on id equals z.Id select z;
foreach (Widget w in orderedList) foreach (Widget w in orderedList)
@@ -410,7 +408,7 @@ namespace AyaNova.Biz
if (jobData.ContainsKey("idList")) if (jobData.ContainsKey("idList"))
idList = ((JArray)jobData["idList"]).ToObject<List<long>>(); idList = ((JArray)jobData["idList"]).ToObject<List<long>>();
else else
idList = await ct.Widget.Select(z => z.Id).ToListAsync(); idList = await ct.Widget.AsNoTracking().Select(z => z.Id).ToListAsync();
bool SaveIt = false; bool SaveIt = false;
foreach (long id in idList) foreach (long id in idList)
{ {