2014-08-28 45 views
0

我刪除刪除對象的一些孩子的在我的派生EFContextProvider類中重寫BeforeSaveEntity保留外鍵衝突:自參照對象和Breeze.js的SaveChanges

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(); 
} 

在我的派生類ApiController與歸因我[BreezeController]因此刷新我的上下文:

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. 

回答

0

你的數據庫沒有觸發器嗎?我曾經看到過這個錯誤是由底層表上的觸發器引起的。