2011-09-06 108 views
1

我在分別具有導航屬性PermissionToEmployeeEmployeeEmployeePermission實體之間具有一對一關係。我可以加載導航性能優良,但我遇到的問題是,當我改變對相關實體EmployeePermission屬性,附加Employee實體映射到一個數據庫上下文並調用SaveChanges()方法,在EmployeePermission實體的變化不被堅持數據庫,但在Employee實體的變化。C#EntityFramework保存1-1關係

這裏是我的模型看起來像:

Model

這裏就是我的保存功能是這樣的:

public static void SaveEntities(List<TEntity> entities) 
{ 
    using(var db = GetContext()) 
    { 
     ObjectSet<TEntity> table = db.CreateObjectSet<TEntity>(); 
     foreach(TEntity entity in entities) 
     { 
      if (entity.IsNew()) 
       table.AddObject(entity); 
      else 
      { 
       table.Attach(entity); 
       EntityState state = (entity.EntityKey.IsTemporary) ? EntityState.Added : EntityState.Modified; 
       table.Context.ObjectStateManager.ChangeObjectState(entity, state); 
      } 
     } 
     db.SaveChanges(); 
    } 
} 

IsNew()是我加入EntityObject類的擴展方法來檢查必須將實體添加或附加到EntitySet

/// <summary> 
/// Returns a value indicating if the entity object is new. 
/// </summary> 
/// <param name="entity"></param> 
/// <returns></returns> 
public static bool IsNew(this EntityObject entity) 
{ 
    return (entity.EntityKey == null || entity.EntityKey.IsTemporary); 
} 

予加載僱員和窗體上結合其特性,改變它們並調用SaveEntities()方法。所有更改Employee實體被保存到數據庫中,但更改EmployeePermission實體沒有保存到數據庫中,我還沒有得到其他實體呢。

我不知道我在做什麼錯了,一直在尋找小時。我感謝所有的幫助,提前致謝。

回答

1

不喜歡你的聲音已經改變了EmployeePermission記錄,因爲你加它的上下文。由於EF不知道它被修改,所以它不知道有什麼要保存。如果您關心,您也可以在該對象上撥打ChangeObjectState

+0

我不明白你的意思究竟是什麼。你能告訴我一個例子嗎?如果我有一對多的關係(我將在後面討論),我將不得不在每個相關實體上執行此方法嗎?看起來很乏味。 –

+0

這是乏味的,因爲你已經選擇了直接綁定到斷開的實體,而不是使用視圖模型和更新連接的實體。 –