1

別のクラスのコレクションを含む集約クラスがありますが、そのクラスはその集約のコレクションにのみ存在するため、コードで ID を指定する必要はなく、への参照も必要ありません。集計。例えば:

public class SalesListing 
{
    public Guid Id { get; set; }
    public ICollection<LocalizedDescription> Descriptions { get; set; }
}

public class LocalizedDescription
{
    public string CultureCode { get; set; }
    public string Title { get; set; }
}

LocalizedDescriptionクラスのキーを の組み合わせとして宣言したいだけで、プロパティや への参照を作成する必要はSalesListingIdありません。EF 5.0 でこれを行う方法はありますか?CultureCodeSalesListingIdSalesListing

たとえば、このような API が存在する場合にどのように見えるかを想像する例を次に示します。

modelBuilder.Entity<LocalizedDescription>().BelongsTo<SalesListing>(s => s.Description)
            .WithKey((s, ld) => new { s.Id, ld.CultureCode })
4

2 に答える 2

1

いいえ、引き続き ID を指定する必要があります

于 2013-02-05T05:53:56.870 に答える
0

次の構文を使用して複合キーを定義できます。

modelBuilder.Entity<LocDesc>().HasKey(ld => new { ld.CultureCode, ld.Title });

とはいえ、整数の主キーを定義しないと後悔すると思います。コンテンツをエクスポートする必要がある場合 (外部のレビューや翻訳など)、ID によるレコードの照合は、タイトルによる照合よりも高速でエラーが発生しにくくなります。ID を持っていても害はありません。後で改造するよりも、今すぐ含める方が簡単です。

マッピング定義で関係に特定のプロパティを指定しないことで、FK マッピングを暗黙的に指定できると思います。

modelBuilder.Entity<SalesListing>().HasMany( e => e.Descriptions ).WithRequired();

外部キー プロパティを指定する必要がある場合SalesListingIDは、値のプロパティを導入し、代わりに次のマッピングを使用します。

modelBuilder.Entity<SalesListing>().HasMany( e => e.Descriptions ).WithRequired()
    .HasForeignKey( r => r.SalesListingID );
于 2013-02-03T00:01:52.933 に答える