2012-02-28 103 views
0

我有DbContext.SaveChanges();實體框架的SaveChanges問題

一些問題,我有一個具有FK表ENGINE表CAR(發動機酒店有屬性[必填])。 另外我用更新方法實現了通用存儲庫。

class Repo<T> where T : IArchivable{ 
     ... 
     public void update(T row){ 
      row.Deleted = true; //Deleted is from interface IArchivable 
      ctx.SaveChange(); 
     } 
     ..... 
     public T Single(System.Linq.Expressions.Expression<Func<T, bool>> condition){ 
      return ctx.Set<T>().where<T>(condition); 
     } 
} 

的情況下:

 .... 
     Repo<CAR> r = new Repo<CAR>(); 
     CAR car = r.Single(o => o.id == 1); 
     r.update(car); 

我會得到錯誤「驗證失敗的一個或多個實體......。」我檢查了,問題是發動機性能的要求但

 .... 
     Repo<CAR> r = new Repo<CAR>(); 
     CAR car = r.Single(o => o.id == 1); 
     car.Engine = car.Engine; 
     r.update(car); 

它會工作。

如何解決?

回答

1

從導航屬性中移除Required屬性或關閉數據層上的驗證。

context.Configurations.ValidateOnSaveEnabled = false; 

爲什麼它在第二種情況的原因是,你正在訪問Engine屬性和EF將使用延遲加載從數據庫中加載,但在第一種情況下你的代碼不會訪問屬性和內部行爲在EF中不會觸發它以避免在保存操作期間發生意外的數據庫往返行程。