c# – 在实体框架中映射连接表

我正在尝试将asp.net成员资格表连接到asp.mvc 3网站.我一直在关注运动商店的Steve Sanderson的书“Pro ASP.NET MVC 3 Framework”中的教程,并将其应用于从成员资格exe生成的表格.

所以我有一个用户类,如下所示:

namespace Domain.Entities
{
    public class User
    {
        public Guid UserId { get; set; }
        public string UserName { get; set; }
        public DateTime LastActivityDate;
        public virtual ICollection<Role> Roles { get; set; }
    }

    public class Role
    {
        public Guid RoleId { get; set; }
        public string RoleName { get; set; }
    }
}

一个看起来像这样的上下文类:

public class EfdbContext : DbContext
{
    public DbSet<User> Users { get; set; }
    public DbSet<Role> Roles { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<User>().ToTable("aspnet_users");
        modelBuilder.Entity<Role>().ToTable("aspnet_roles");
    }
}

但我得到一个错误,因为我假设它正在寻找这两个表之间的连接,实际上在它们之间有一个连接表(aspnet_UsersInRoles)以避免多对多的链接,当我尝试从用户引用Role模型时,如:

var test = _repository.Users.FirstOrDefault().Roles.Count();

{“Invalid column name ‘User_UserId’.\r\nInvalid column name
‘User_UserId’.\r\nInvalid column name ‘User_UserId’.”}

有没有办法使用实体框架使用连接表将表映射到一起?添加新的ADO.NET实体数据模型并让visual studio数据库进行逆向工程更好吗?

解决方法

您需要自定义多对多映射,如下所示
protected override void OnModelCreating(DbModelBuilder modelBuilder)
  {
       modelBuilder.Entity<User>().ToTable("aspnet_users");
       modelBuilder.Entity<Role>().ToTable("aspnet_roles");

       modelBuilder.Entity<User>()
       .HasMany(u => u.Roles).WithMany(r => r.Users)
            .Map(m =>
            {
                m.ToTable("aspnet_UsersInRoles");
                m.MapLeftKey("UserId");
                m.MapRightKey("RoleId");
            });
   }

编辑:您还需要将Users属性添加到R​​ole类.否则映射应更改为

modelBuilder.Entity<User>()
       .HasMany(u => u.Roles).WithMany()
            .Map(m =>
            {
                m.ToTable("aspnet_UsersInRoles");
                m.MapLeftKey("UserId");
                m.MapRightKey("RoleId");
            });

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...