This commit is contained in:
2021-01-14 23:20:38 +00:00
parent 7117be5670
commit 3a48e6cd3d
2 changed files with 51 additions and 36 deletions

View File

@@ -60,35 +60,6 @@ namespace AyaNova.Biz
} }
} }
/*
static void Main(string[] args)
{
using (var dbContext = new DbParentChild())
{
var parent = new Parent
{
FirstName = "Joe",
LastName = "Smith"
};
parent.Children.Add(
new Child
{
FirstName = "LittleJoe",
LastName = "Smith"
});
parent.Children.Add(
new Child
{
FirstName = "Anne",
LastName = "Smith"
});
dbContext.Add(parent);
dbContext.SaveChanges();
}
}
*/
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//DUPLICATE //DUPLICATE
@@ -135,9 +106,10 @@ namespace AyaNova.Biz
return ret; return ret;
} }
//////////////////////////////////////////////////////////////////////////////////////////////// /*
////////////////////////////////////////////////////////////////////////////////////////////////
//UPDATE //UPDATE
// //this is how it was roughly
internal async Task<PartAssembly> PutAsync(PartAssembly putObject) internal async Task<PartAssembly> PutAsync(PartAssembly putObject)
{ {
// PartAssembly dbObject = await ct.PartAssembly.SingleOrDefaultAsync(m => m.Id == putObject.Id); // PartAssembly dbObject = await ct.PartAssembly.SingleOrDefaultAsync(m => m.Id == putObject.Id);
@@ -147,9 +119,9 @@ namespace AyaNova.Biz
AddError(ApiErrorCode.NOT_FOUND, "id"); AddError(ApiErrorCode.NOT_FOUND, "id");
return null; return null;
} }
// PartAssembly SnapshotOfOriginalDBObj = new PartAssembly(); PartAssembly SnapshotOfOriginalDBObj = new PartAssembly();
//CopyObject.Copy(dbObject, SnapshotOfOriginalDBObj); CopyObject.Copy(dbObject, SnapshotOfOriginalDBObj);
//CopyObject.Copy(putObject, dbObject, "Id"); CopyObject.Copy(putObject, dbObject, "Id");
dbObject.Tags = TagBiz.NormalizeTags(dbObject.Tags); dbObject.Tags = TagBiz.NormalizeTags(dbObject.Tags);
dbObject.CustomFields = JsonUtil.CompactJson(dbObject.CustomFields); dbObject.CustomFields = JsonUtil.CompactJson(dbObject.CustomFields);
ct.Entry(dbObject).OriginalValues["Concurrency"] = putObject.Concurrency; ct.Entry(dbObject).OriginalValues["Concurrency"] = putObject.Concurrency;
@@ -173,6 +145,44 @@ namespace AyaNova.Biz
await HandlePotentialNotificationEvent(AyaEvent.Modified, dbObject, SnapshotOfOriginalDBObj); await HandlePotentialNotificationEvent(AyaEvent.Modified, dbObject, SnapshotOfOriginalDBObj);
return dbObject; return dbObject;
} }
*/
////////////////////////////////////////////////////////////////////////////////////////////////
//UPDATE
//
internal async Task<PartAssembly> PutAsync(PartAssembly putObject)
{
//Get the db object with no tracking as about to be replaced not updated
PartAssembly 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);
ct.Replace(dbObject,putObject);
if (HasErrors) return null;
try
{
await ct.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!await ExistsAsync(putObject.Id))
AddError(ApiErrorCode.NOT_FOUND);
else
AddError(ApiErrorCode.CONCURRENCY_CONFLICT);
return null;
}
await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, dbObject.Id, BizType, AyaEvent.Modified), ct);
await SearchIndexAsync(dbObject, false);
await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags,dbObject.Tags);
await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject);
return putObject;
}
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//DELETE //DELETE

View File

@@ -90,7 +90,12 @@ namespace AyaNova.Models
public AyContext(DbContextOptions<AyContext> options) : base(options) public AyContext(DbContextOptions<AyContext> options) : base(options)
{ } { }
//https://stackoverflow.com/a/64053832/8939
public void Replace<TEntity>(TEntity oldEntity, TEntity newEntity) where TEntity : class
{
ChangeTracker.TrackGraph(oldEntity, e => e.Entry.State = EntityState.Deleted);
ChangeTracker.TrackGraph(newEntity, e => e.Entry.State = e.Entry.IsKeySet ? EntityState.Modified : EntityState.Added);
}
protected override void OnModelCreating(ModelBuilder modelBuilder) protected override void OnModelCreating(ModelBuilder modelBuilder)
{ {