Entity framework 实体框架用户角色多对多关系

Entity framework 实体框架用户角色多对多关系,entity-framework,Entity Framework,嗨,我正在尝试为用户和角色之间的多对多关系设置实体框架 下图显示了数据库中的内容: 用户的模型为: public class User : IEntity { public virtual int UserId { get; set; } [Column(TypeName = "varchar")] [StringLength(100)] public virtual string UserName { get; set;

嗨,我正在尝试为用户和角色之间的多对多关系设置实体框架

下图显示了数据库中的内容:

用户的模型为:

public class User : IEntity
    {
        public virtual int UserId { get; set; }
        [Column(TypeName = "varchar")]
        [StringLength(100)]
        public virtual string UserName { get; set; }
        [Column(TypeName = "varchar")]
        [StringLength(100)]
        public virtual string FirstName { get; set; }
        [Column(TypeName = "varchar")]
        [StringLength(100)]
        public virtual string LastName { get; set; }
        [Column(TypeName = "varchar")]
        [StringLength(200)]
        public virtual string EmailAddress { get; set; }
        public int AreaId { get; set; }
        [Column(TypeName = "varchar")]
        [StringLength(64)]
        public string CreatedByUserName { get; set; }
        public DateTime CreatedDateTime { get; set; }
        [Column(TypeName = "varchar")]
        [StringLength(64)]
        public string LastModifiedByUserName { get; set; }
        public DateTime? LastModifiedDateTime { get; set; }

        //Navigation properties
        //public virtual Role Role { get; set; }
        public virtual Area Area { get; set; }

        public virtual ICollection<Role> Roles { get; set; }

}
因此,我认为我的设置很好,但在我的代码中,我会这样做:

var roles = from r in user.Roles
                        select r.Name;
它会自行射击,给出以下错误:

Server Error in '/' Application.
Invalid object name 'dbo.RoleUser'. 
因此,我在上下文中添加了以下内容:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<User>()
                .HasMany(i => i.Roles)
                .WithMany(u => u.Users);

}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasMany(i=>i.Roles)
.有许多(u=>u.user);
}
但是,现在我得到了以下错误:

Server Error in '/' Application.
Invalid object name 'dbo.RoleUser'. 
“/”应用程序中出现服务器错误。 列名“Role\u RoleId”无效。 列名“User\u UserId”无效


因此,我肯定没有在这里正确设置某些内容。andybody可以为我指出正确的方向吗?

您不需要将链接表
UserRole
建模为一个类,因为它只有参与关系的表的主键。因此,删除
UserRole

如果您正在对现有数据库建模,EF可能会推断链接表名称为
RoleUser
。为了避免这种情况,您可以按如下方式配置链接表

 protected override void OnModelCreating(DbModelBuilder modelBuilder)
 {
        modelBuilder.Entity<User>()
            .HasMany(i => i.Roles)
            .WithMany(u => u.Users)
            .Map(m =>
            {
                m.ToTable("UserRole");
                m.MapLeftKey("UserId");
                m.MapRightKey("RoleId");
            });

 }
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasMany(i=>i.Roles)
.具有多个用户(u=>u.Users)
.Map(m=>
{
m、 ToTable(“用户角色”);
m、 MapLeftKey(“用户ID”);
m、 MapRightKey(“RoleId”);
});
}

角色实体不知道用户实体的情况如何?如何编写配置代码?
 protected override void OnModelCreating(DbModelBuilder modelBuilder)
 {
        modelBuilder.Entity<User>()
            .HasMany(i => i.Roles)
            .WithMany(u => u.Users)
            .Map(m =>
            {
                m.ToTable("UserRole");
                m.MapLeftKey("UserId");
                m.MapRightKey("RoleId");
            });

 }