gpt4 book ai didi

C# Entity Framework 保存 1-1 关系

转载 作者:行者123 更新时间:2023-11-29 00:53:18 24 4
gpt4 key购买 nike

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

这是我的模型的样子:

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);
}

我加载了一个员工并将其属性绑定(bind)到一个表单上,更改它们并调用 SaveEntities() 方法。 Employee实体的所有修改都保存到数据库中,但是EmployeePermission实体的修改没有保存到数据库中,其他的我还没搞定实体。

我不确定我做错了什么并且已经搜索了几个小时。感谢所有的帮助,提前致谢。

最佳答案

自从将 EmployeePermission 记录添加到上下文后,这听起来不像是您对其进行了更改。由于 EF 不知道它已被修改,因此它不知道有什么要保存的。如果您愿意,也可以对该对象调用 ChangeObjectState

关于C# Entity Framework 保存 1-1 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7324319/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com