簡體   English   中英

ForeignKey-多對多(EntityFramework)中的定義?

[英]ForeignKey - Definition in Many-to-Many (EntityFramework)?

因為我不喜歡實體命名約定,所以EntityFramework(首先使用代碼)使用的是我通常使用的foreignKey屬性來分配自己的屬性:

public class User {
   public virtual Customer Customer { get; set; }
   [ForeignKey("Customer")]
   public Guid CustomerId { get; set; }
}

工作正常,在“用戶”-表內創建了“ CustomerId”列。

但是,當我需要多對多關系時,如何實現相同目標?

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

public class Role {
   public virtual ICollection<User> Users { get;set; }
}

這將導致包含“ User_id”和“ Role_Id”的表“ UserRole”。

不過,我還是更喜歡“ UserId”和“ RoleId”。 我可以自己創建一個UserRole-Class,其中包含對User和Role的引用,但是應該有一種更優雅的方法。 有沒有?

您可以使用Fluent Api在您的上下文中配置多對多關系,如下所示:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{

   modelBuilder.Entity<User>()
               .HasMany<Role>(u => u.Roles)
               .WithMany(c => c.Users)
               .Map(cs =>
                        {
                            cs.MapLeftKey("UserId");
                            cs.MapRightKey("RoleId");
                            cs.ToTable("UserRoles");
                        });

}

這樣,您可以使用所需的名稱來命名聯結表和FK列。

另一種方法是創建一個表示聯結表的實體,並使用UserRole建立兩個一對多的關系,但是如果不需要在聯結表中添加額外的列,建議使用第一個變體,但是可以在顯式映射此表中找到一些優勢

暫無
暫無

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

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