Dunno如何恰当地命名。我在m:n关系中有两个实体:成员和角色。
public class Role
{
public int Id { get; set; }
public string Title { get; set; }
public ICollection<Member> MembersInRole { get; set; }
}
public class Member
{
public int Id { get; set; }
public string Name { get; set; }
public string Password { get; set; }
public string Email { get; set; }
public ICollection<Role> Roles { get; set; }
}
我已经制作了一些种子数据:
http://i56.tinypic.com/2vjvj1w.png
并写了测试:
http://i54.tinypic.com/112916b.png
问题是,我的会员实体没有分配角色,即使我在上下文中创建它们(如图所示)。我不知道出了什么问题。数据库中的表似乎没问题。我不确定上下文实例是否有问题。但它应该没问题,因为我一直在处理种子数据。
答案 0 :(得分:9)
您的MembersRole
和Roles
导航属性不是虚拟的,因此EF无法为延迟加载创建代理。因此,您必须明确要求EF加载导航属性。将您的属性标记为虚拟:
public class Role
{
public int Id { get; set; }
public string Title { get; set; }
public virtual ICollection<Member> MembersInRole { get; set; }
}
public class Member
{
public int Id { get; set; }
public string Name { get; set; }
public string Password { get; set; }
public string Email { get; set; }
public virtual ICollection<Role> Roles { get; set; }
}
或使用@Yakimych方法。 EF 4.1中的急切加载也可以用lambdas定义:
Member admin = db.Members.Include(m => m.Roles)
.FirstOrDefault(m => m.Name == "Admin");
答案 1 :(得分:2)
尝试通过明确地包含角色来急切加载角色:
Member admin = db.Members.Include("Roles").FirstOrDefault(m => m.Name == "Admin");