簡體   English   中英

實體框架每個類型的表:1:0…*與派生類的FK關系-是基類還是派生類的FK?

[英]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通過UserProfileTenantGroupMember中創建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.

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