簡體   English   中英

自引用對象和Breeze.js SaveChanges

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM