我在Employee
和EmployeePermission
个实体之间有一对一的关系,分别具有导航属性PermissionTo
和Employee
。我可以很好地加载导航属性,但我遇到的问题是当我更改相关实体EmployeePermission
的属性时,将Employee
实体附加到数据库上下文并调用{{1}方法,SaveChanges()
实体中的更改不会持久保存到数据库,但EmployeePermission
实体中的更改是。
这是我的模型的样子:
这是我的保存功能:
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
实体的更改未保存到数据库中,我还没有进入其他实体。
我不确定我做错了什么,并且一直在搜索。感谢所有的帮助,提前谢谢。
答案 0 :(得分:1)
自从您将EmployeePermission
记录添加到上下文后,听起来并没有改变ChangeObjectState
记录。由于EF不知道它被修改了,它没有意识到有什么可以保存。如果您愿意,也可以在该对象上调用{{1}}。