EF Code第一个相关实体上下文失败

Dam*_*amb 3 entity-relationship many-to-many entity-framework ef-code-first entity-framework-4.1

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; }
}
Run Code Online (Sandbox Code Playgroud)

我已经制作了一些种子数据:http :
//i56.tinypic.com/2vjvj1w.png

并写了测试:http :
//i54.tinypic.com/112916b.png

问题是,我的会员实体没有分配角色,即使我在上下文中创建它们(如图所示).我不知道出了什么问题.数据库中的表似乎没问题.我不确定上下文实例是否有问题.但它应该没问题,因为我一直在处理种子数据.

Lad*_*nka 9

MembersRoleRoles导航属性不是虚拟的,因此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; }
}
Run Code Online (Sandbox Code Playgroud)

或者使用@Yakimych方法.EF 4.1中的急切加载也可以使用lambdas定义:

Member admin = db.Members.Include(m => m.Roles)
                         .FirstOrDefault(m => m.Name == "Admin");
Run Code Online (Sandbox Code Playgroud)