[英]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列。
另一種方法是創建一個表示聯結表的實體,並使用User
和Role
建立兩個一對多的關系,但是如果不需要在聯結表中添加額外的列,建議使用第一個變體,但是可以在顯式映射此表中找到一些優勢 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.