我有一个类Tenant
,它是抽象类型UserProfile
。我正在使用table-per-type继承方法。租户可以代表一组租户。 TenantGroupMember
是这样一个群体中的一个。因此,1 Tenant
可以有0个或多个TenantGroupMember
s。
这种关联如何使用每类表格方法表示?我接近它的方式如下:
[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
中制作FK时是否正确?由于ICollection TenantGroupMembers
位于Tenant
,因此EF会知道TenantGroupMember
只能与Tenant
相关联,而且UserProfile
不会与任何其他派生类相关联}?
答案 0 :(得分:1)
是的,你是对的。但是,您必须显式声明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
表。