作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我首先使用实体框架代码,我想将一个集合标记为不使用延迟加载。我不知道这个概念被称为预加载。但到目前为止,我知道我只需要设置虚拟属性即可使用延迟加载。但如果我不想延迟加载,我应该让它不虚拟。
public class User
{
public int Id { get; set; }
public string Username { get; set; }
public ICollection<Role> Roles { get; set; } // no virtual
}
public class Role
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<User> Users { get; set; } // virtual
}
在我的概念模型中,我总是需要用户的角色,然后我不想延迟加载。我不想在我的查询中使用 Include()。我只希望该属性始终可用。
using (DataContext ctx = new DataContext(connectionString))
{
var role = ctx.Roles.Find(1);
var users = role.Users; //lazy loading working
var user = ctx.Users.Find(1);
var roles = user.Roles; //null exception
}
但是,当我加载用户时, Entity Framework 将 Roles 属性设置为 null。此外,当我加载一个角色时,Users 属性可以很好地工作,并且可以延迟加载。
如果我使用 Include,我可以让它工作,但我不想使用它。也因为我不能使用 Find 方法。
var user = ctx.Users.Include(r => r.Roles).Find(1); //the find method is not accessible
var user = ctx.Users.Include(r => r.Roles).First(u => Id == 1); //I must use this way
所以,我想错了? Entity Framework 默认假设我们总是必须使用 Include 来不使用延迟加载?或者我错过了一些让它工作的东西?
最佳答案
您也可以在之后加载集合:
// Find the User entity with the given primary key value == 1
var user = ctx.Users.Find(1);
// Loads the related Roles entities associated with the User entity
ctx.Entry(user).Collection(u => u.Roles).Load();
关于entity-framework - 如何在没有延迟加载的情况下默认加载 Entity Framework ICollection?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11834494/
我是一名优秀的程序员,十分优秀!