[英]Entity Framework code first - Derived class not in the same assembly as the base class
[英]Entity Framework table-per-type: 1:0…* FK relationship with a derived class - is FK of base class or derived class?
我有一個Tenant
類,它是抽象類型UserProfile
。 我正在使用每個類型的表繼承方法。 租戶可以代表一組租戶。 TenantGroupMember
是此類組之一。 因此,1個Tenant
可以具有零個或多個TenantGroupMember
。
如何使用每個類型的表格表示這種關聯? 我所采用的方式如下:
[Table("TenantGroupMember")]
public class TenantGroupMember
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int TenantGroupMemberId { get; set; }
// 1:many with Tenant - base UserProfile
public int UserProfileId { get; set; }
}
[Table("Tenant")]
public class Tenant : UserProfile
{
public string TenantAge { get; set; }
public string PersonalDescription { get; set; }
// 1:many with TenantGroupMember
public virtual ICollection<TenantGroupMember> TenantGroupMembers { get; set; }
}
我是否TenantGroupMember
通過UserProfile
在TenantGroupMember
中創建FK嗎? 由於ICollection TenantGroupMembers
位於Tenant
,EF是否會知道TenantGroupMember
只能與Tenant
相關聯,而不能與UserProfile
任何其他派生類關聯?
是的,你是對的。 但是,您必須顯式聲明TenantGroupMember.UserProfileId
屬性為關系的外鍵。 EF不會按慣例檢測到此錯誤,而是將其視為普通標量屬性,並在數據庫中創建另一個FK列。 您可以使用數據批注...
[ForeignKey("UserProfileId")]
public virtual ICollection<TenantGroupMember> TenantGroupMembers { get; set; }
...或使用Fluent API:
modelBuilder.Entity<Tenant>()
.HasMany(t => t.TenantGroupMembers)
.WithRequired()
.HasForeignKey(tgm => tgm.UserProfileId);
該關系會將數據庫中的“ Tenant
表作為主/主鍵表,而不是UserProfile
表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.