簡體   English   中英

實體框架數據庫首先是多對多的

[英]Entity Framework Database First many-to-many

我從數據庫中創建了一個Entity Framework模型。 我有多對多的關系: User - UserRole - Role

EF創建UserRole實體UserRoles導航屬性在User實體和Role的實體,但我寧願有RolesUserUsersRole 這是否可以通過模型設計師設計? 如何手動配置中間表的多對多關系?

如果UserRole表包含除User和Role表的外鍵之外的列,則EF通常會創建中間模型。

因此,如果UserRoles表中只有2列,則用戶和角色表的FK(甚至不是代理鍵),EF都可以根據需要創建模型。 (沒有任何中間模型)因此,這是一種方法,可以自動生成所需的行為。 表中只有2列。

但是如果你在這個表中有其他非鍵列(數據),那么EF正在做的是正確的。 你需要中間實體。

如果您沒有任何非鍵列,不想再修改數據庫,並且不需要在模型中使用此中間表,則可以手動修改OnModelCreating,以指定Many-to - 很多並隱藏中間表。

以下是所有步驟:

  1. 從模型層中刪除中間表定義C#類,並在DbContext和User和Role類中刪除它們。
  2. 在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"); 
                                   });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM