gpt4 book ai didi

entity-framework - 添加的代码优先实体不会延迟加载属性

转载 作者:行者123 更新时间:2023-12-03 21:40:17 25 4
gpt4 key购买 nike

如果在添加实体后立即需要,我有一个问题,即新添加的实体的属性不是延迟加载的。

例如:

我有一个具有虚拟 JobRole 属性的 User 实体:

public class User
{
public int Id { get; set; }

public virtual JobRole JobRole { get; set; }
public int JobRoleId { get; set; }

public string Name { get; set; }
}

然后我添加一个新用户:
public User Add(User user)
{
var addedUser = _myContext.Users.Add(user);
myContext.SaveChanges();
return addedUser;
}

然后将返回的对新用户的引用传递给 Razor View ,在那里它尝试显示 JobRole(例如 JobRole.Name)。在用户被传递给 View 时,它具有:
  • JobRoleId 正确设置为整数值。
  • 工作角色 = 空

  • 然后我希望 JobRole 在被 View 使用时被延迟加载,但它不是,并导致空引用异常。

    这是预期的行为,还是有办法让新添加的实体延迟加载它们的属性?

    提前感谢您的任何想法。

    环境:
    使用 Entity Framework 4.2 代码优先。
    启用延迟加载。

    最佳答案

    那是因为 DbSet.Add方法返回作为参数传递给它的相同对象,在您的情况下它不是代理实例,因此延迟加载不可用。

    您应该创建 User传递给 DbSet.Add 的对象使用 DbSet.Create方法,它将返回一个代理实例,然后在通过 DbContext 持久化它之前分配它的属性。 .

    下面是一个例子:

    public User Add(User user)
    {
    var newUser = _myContext.Users.Create();

    // Copy the property values from 'user' to 'newUser' e.g.
    // newUser.Name = user.Name

    _myContext.Users.Add(newUser);
    myContext.SaveChanges();

    return newUser;
    }

    关于entity-framework - 添加的代码优先实体不会延迟加载属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9261890/

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