实体框架入口加载相关实体

本文关键字:实体 入口 框架 加载 | 更新日期: 2023-09-27 18:25:47

假设我有以下自动生成的实体

public class Entity1
{
    public int Id { get; set; }
    public int Entity2Id { get; set; }
    public Entity2 { get; set; }
}
public class Entity2
{
    public int Id { get; set; }
}

我在MVC应用程序中有一个更新方法,看起来像这样:

public ActionResult Edit(Entity1 entity)
{
    _db.Entry(entity).State = EntityState.Modified;
    _db.SaveChanges();
    DoSomething(entity);
}

当前entity具有Entity2Id属性集,但没有Entity2属性集。如何对entity对象中的所有相关实体进行水合。

我试过做

_db.Find(entity.ID)

如果我把这个方法放在调用SaveChanges之后,它会检索没有水合Entity2的缓存实体。如果我把它放在Entry调用之前,我会在Entry调用上得到一个错误,说Entry已经存在。我还试着在条目上调用Reload,但似乎没有任何作用。

实体框架入口加载相关实体

您需要将Entity2作为virtual:

public virtual Entity2 { get; set; }

EF会为您自动补水。

如果您碰巧更改了Entity2Id并希望重新加载更改后的实体,您可以明确地说:

context.Entry(entity).Reference(p => p.Entity2).Load();