EF代码第一个相关的实体上下文失败
问题描述:
不知道如何正确命名。我有m:n关系中的两个实体:成员和角色。EF代码第一个相关的实体上下文失败
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
的问题是,我的会员单位没有分配角色,甚至当我在上下文中创建它们时(如您在图像中看到的那样)。我不知道什么是错的。数据库中的表似乎没问题。我不确定上下文实例是否有问题。但它应该没问题,因为我一直在处理种子数据。通过将其明确包含
答
尝试渴望加载的角色:
Member admin = db.Members.Include("Roles").FirstOrDefault(m => m.Name == "Admin");
答
你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");
+0
+1感谢您的进一步解释。我很愚蠢,实际上忘记了这一点。 – Damb 2011-04-10 10:39:51
谢谢,这是一个可行的解决方案。 – Damb 2011-04-10 10:40:47