App*_*ere 14 entity-framework lazy-loading code-first
我有一个问题,即新添加的实体的属性不是延迟加载的,如果在添加实体后立即需要.
例如:
我有一个具有虚拟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; }
}
Run Code Online (Sandbox Code Playgroud)
然后我添加一个新用户:
public User Add(User user)
{
var addedUser = _myContext.Users.Add(user);
myContext.SaveChanges();
return addedUser;
}
Run Code Online (Sandbox Code Playgroud)
然后将返回的对新用户的引用传递给Razor视图,在该视图中它尝试显示JobRole(例如JobRole.Name).在将User传递给View时,它具有:
然后我会期望JobRole在被View使用时被延迟加载,但它不会导致null引用异常.
这是预期的行为,还是有办法让新添加的实体延迟加载其属性?
提前感谢任何想法.
环境:使用Entity Framework 4.2代码优先.启用了延迟加载.
Enr*_*lio 20
这是因为DbSet.Add方法返回已作为参数传递给它的同一对象,在您的情况下,它不是代理实例,因此延迟加载不可用.
您应该使用DbSet.Create方法创建User传递给DbSet.Add的对象,该方法将返回代理实例,然后在通过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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3322 次 |
| 最近记录: |