实体框架数据库第一多

我已经从数据库创建了一个实体框架模型。 我有多对多的关系: User - UserRole - Role

EF在User实体和Role实体中创建UserRole实体和UserRoles导航属性,但我宁愿在Roles中的UserUsers Role 。 可以通过模型设计器来设计吗? 我怎样才能手动配置中间表与一个表的多对多关系?


如果UserRole表包含User和Role表的外键以外的列,则EF通常会创建中间模型。

所以如果你在UserRoles表中只有2列,那么两个FK到用户和角色表(甚至不是代理键),EF会根据你的需要创建模型。 (没有任何中间模型)所以这是一种方法,可以自动生成所需的行为。 表中只有2列。

但是如果你在这个表中有其他非关键列(数据),那么EF做的是正确的。 你需要中间实体。

在没有任何非键列的情况下,不想再修改数据库,也不需要在模型中使用此中间表,可以手动修改OnModelCreating,以指定Many-to - 许多并隐藏中间表。

以下是所有步骤:

  • 从模型层中删除中间表定义C#类,并在DbContext和User和Role类中引用它。
  • 在User和Role类中为对方添加虚拟Collection属性。
  • 例如在User类中,

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

    和User构造函数中

    this.Roles = new HashSet<Role>();
    
    // on the OnModelCreating method, add this snippet
    modelBuilder.Entity<User>().HasMany<Role>(u => u.Roles)
                              .WithMany(r => r.Users)
                              .Map(ru => 
                                       {  
                                         ru.MapLeftKey("UserId");        
                                         ru.MapRightKey("RoleId"); 
                                         ru.ToTable("UserRole"); 
                                       });
    
    链接地址: http://www.djcxy.com/p/37447.html

    上一篇: Entity Framework Database First many

    下一篇: How to model multilingual entities in relational databases