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,36 +60,7 @@ 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
//
@@ -135,9 +106,10 @@ namespace AyaNova.Biz
return ret;
}
////////////////////////////////////////////////////////////////////////////////////////////////
/*
////////////////////////////////////////////////////////////////////////////////////////////////
//UPDATE
//
//this is how it was roughly
internal async Task<PartAssembly> PutAsync(PartAssembly putObject)
{
// PartAssembly dbObject = await ct.PartAssembly.SingleOrDefaultAsync(m => m.Id == putObject.Id);
@@ -147,9 +119,9 @@ namespace AyaNova.Biz
AddError(ApiErrorCode.NOT_FOUND, "id");
return null;
}
// PartAssembly SnapshotOfOriginalDBObj = new PartAssembly();
//CopyObject.Copy(dbObject, SnapshotOfOriginalDBObj);
//CopyObject.Copy(putObject, dbObject, "Id");
PartAssembly SnapshotOfOriginalDBObj = new PartAssembly();
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;
@@ -173,6 +145,44 @@ namespace AyaNova.Biz
await HandlePotentialNotificationEvent(AyaEvent.Modified, dbObject, SnapshotOfOriginalDBObj);
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

View File

@@ -90,7 +90,12 @@ namespace AyaNova.Models
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)
{