[英]Self referencing objects and Breeze.js SaveChanges
我通過在派生的EFContextProvider類中重寫BeforeSaveEntity
來刪除已刪除對象的某些子項,以保留外鍵沖突:
protected override bool BeforeSaveEntity(EntityInfo entityInfo)
{
dbEntities db = new dbEntities();
if (entityInfo.Entity.GetType() == typeof(ServerFile) && entityInfo.EntityState == EntityState.Deleted)
{
ServerFile filetodelete = entityInfo.Entity as ServerFile;
if (filetodelete.OriginalFileID == null)
{
IEnumerable<ServerFile> f = db.ServerFiles.Where(x => x.OriginalFileID == filetodelete.ID);
foreach (ServerFile fd in f)
db.ServerFiles.Remove(fd);
}
}
db.SaveChanges();
}
因此,在派生為[BreezeController]
ApiController類中,我刷新了上下文:
public SaveResult SaveChanges(JObject saveBundle)
{
_contextProvider.ObjectContext.Refresh(RefreshMode.StoreWins, _contextProvider.ObjectContext.ObjectStateManager.GetObjectStateEntries(System.Data.Entity.EntityState.Deleted));
return _contextProvider.SaveChanges(saveBundle);
}
但是我仍然得到錯誤:
An exception of type 'System.Exception' occurred in Breeze.ContextProvider.dll
but was not handled in user code
Additional information: Store update, insert, or delete statement affected an
unexpected number of rows (0). Entities may have been modified or deleted since
entities were loaded. Refresh ObjectStateManager entries.
您的數據庫上沒有觸發器嗎? 我已經看到該錯誤是過去由基礎表上的觸發器引起的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.