web-dev-qa-db-ja.com

Fluent APIによるEntity Frameworkの複数列を主キーとして

これらは私の簡略化されたドメインクラスです

public class ProductCategory
{
    public int ProductId { get; set; }
    public int CategoryId { get; set; }

    public virtual Product Product { get; set; }
    public virtual Category Category { get; set; }
}

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
} 

public class Category
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int? ParentCategoryId { get; set;} 
} 

これは私のマッピングクラスです。しかし機能しません。

public class ProductCategoryMap : EntityTypeConfiguration<ProductCategory>
{
    public ProductCategoryMap()
    {
        ToTable("ProductCategory");
        HasKey(pc => pc.ProductId);
        HasKey(pc => pc.CategoryId);
    }
}

1つの製品を複数のカテゴリで見ることができるように、これらのクラスをどのようにマップする必要がありますか?

43

2つの区切られたステートメントの代わりに匿名型オブジェクトを使用します。

_    HasKey(pc => new { pc.ProductId, pc.CategoryId});
_

MSDNから: EntityTypeConfiguration.HasKey Method

主キーが複数のプロパティで構成されている場合、プロパティを含む匿名タイプを指定します。たとえば、C#_t => new { t.Id1, t.Id2 }_およびVisual Basic .Net Function(t) New From { t.Id1, t.Id2 }では。

93
MarcinJuraszek

不満なことに、特にラムダに堪能でない場合は、MSDN VBの例は間違っています...これは 'From'ではなく 'With'である必要があります。

(ありがとう Aki Siponen

0
saminpa