C#Entity Framework保存1-1关系

时间:2011-09-06 18:16:17

标签: c# mysql wpf entity-framework-4 entity-relationship

我在EmployeeEmployeePermission个实体之间有一对一的关系,分别具有导航属性PermissionToEmployee。我可以很好地加载导航属性,但我遇到的问题是当我更改相关实体EmployeePermission的属性时,将Employee实体附加到数据库上下文并调用{{1}方法,SaveChanges()实体中的更改不会持久保存到数据库,但EmployeePermission实体中的更改是。

这是我的模型的样子:

Model

这是我的保存功能:

Employee

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实体的更改未保存到数据库中,我还没有进入其他实体。

我不确定我做错了什么,并且一直在搜索。感谢所有的帮助,提前谢谢。

1 个答案:

答案 0 :(得分:1)

自从您将EmployeePermission记录添加到上下文后,听起来并没有改变ChangeObjectState记录。由于EF不知道它被修改了,它没有意识到有什么可以保存。如果您愿意,也可以在该对象上调用{{1}}。