这个问题是以下问题的延续:
EntityFramework 将新对象添加到集合中 https://stackoverflow.com/q/13867609/1268570
现在我明白了,当使用DbSet
EF 不会将整个集合加载到内存中
但是如果我有类似下面的代码怎么办:
public class User
{
public int UserID { get; set; }
public string UserName { get; set; }
public ICollection<Role> Roles { get; set; }
}
public class Role
{
public int RoleID { get; set; }
public string RoleName { get; set; }
public User User { get; set; }
}
public class MyContext : DbContext
{
public DbSet<User> Users { get; set; }
public DbSet<Role> Roles { get; set; }
}
public class SomeClass
{
public void AssignRoleToUser(int userID, Role role)
{
var ctx = new MyContext();
var user = ctx.Users.First(x => x.UserID.Equals(userID));
user.Roles.Add(role);
ctx.SaveChanges();
}
}
在这种情况下,我没有使用DbSet
对象添加一个新对象到Role相反,我使用以下方法向特定用户添加新角色ICollection
收藏
那么在这种情况下会发生什么呢?
EntityFramewrk 是否必须将所有用户角色加载到内存中才能执行插入?
在上面提供的代码中,您没有添加新角色,因为您的 ctx.Users 仅用于检索数据。这篇 SE 帖子中也解决了类似的问题 -Linq To Entities - 如何过滤子实体 https://stackoverflow.com/q/4720573/1437962.
我建议看看这篇简短而有用的文章 -实体框架 4.0 常见问题解答 – 入门指南 http://www.dotnetcurry.com/ShowArticle.aspx?ID=599.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)