1

Tenant抽象型のクラスがありUserProfileます。タイプごとのテーブル継承アプローチを使用しています。テナントは、テナントのグループを表すことができます。ATenantGroupMemberはそのようなグループの1つです。したがって、1Tenantは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からFKを作るのは正しいUserProfileですか?にあるため、EFは、aはにのみICollection TenantGroupMembers関連付けることができ、他の派生クラスには関連付けられないことを認識しますか?TenantTenantGroupMemberTenantUserProfile

4

1 に答える 1

1

はい、その通りです。TenantGroupMember.UserProfileIdただし、関係の外部キーとしてプロパティを明示的に宣言する必要があります。EFは慣例によりこれを検出せず、通常のスカラープロパティとして扱い、データベースに別のFK列を作成します。あなたはデータ注釈でそれを行うことができます...

[ForeignKey("UserProfileId")]
public virtual ICollection<TenantGroupMember> TenantGroupMembers { get; set; }

...またはFluentAPIを使用:

modelBuilder.Entity<Tenant>()
    .HasMany(t => t.TenantGroupMembers)
    .WithRequired()
    .HasForeignKey(tgm => tgm.UserProfileId);

リレーションシップにはTenant、データベース内のテーブルが、テーブルではなく、主キー/主キーテーブルとして含まれUserProfileます。

于 2013-01-27T22:04:47.460 に答える