我在分別具有導航屬性PermissionTo
和Employee
的Employee
和EmployeePermission
實體之間具有一對一關係。我可以加載導航性能優良,但我遇到的問題是,當我改變對相關實體EmployeePermission
屬性,附加Employee
實體映射到一個數據庫上下文並調用SaveChanges()
方法,在EmployeePermission
實體的變化不被堅持數據庫,但在Employee
實體的變化。C#EntityFramework保存1-1關係
這裏是我的模型看起來像:
這裏就是我的保存功能是這樣的:
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
實體沒有保存到數據庫中,我還沒有得到其他實體呢。
我不知道我在做什麼錯了,一直在尋找小時。我感謝所有的幫助,提前致謝。
我不明白你的意思究竟是什麼。你能告訴我一個例子嗎?如果我有一對多的關係(我將在後面討論),我將不得不在每個相關實體上執行此方法嗎?看起來很乏味。 –
這是乏味的,因爲你已經選擇了直接綁定到斷開的實體,而不是使用視圖模型和更新連接的實體。 –