it-swarm.com.de

Entity Framework Mehrere Spalten als Primärschlüssel durch fließende API

Dies sind meine vereinfachten Domänenklassen.

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;} 
} 

Dies ist meine Mapping-Klasse. Aber es funktioniert nicht.

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

Wie sollte ich diese Klassen zuordnen, um ein Produkt in mehreren Kategorien anzuzeigen?

42

Verwenden Sie anonyme Typenobjekte anstelle von zwei getrennten Anweisungen:

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

Von MSDN: EntityTypeConfiguration.HasKey-Methode

Wenn der Primärschlüssel aus mehreren Eigenschaften besteht, geben Sie einen anonymen Typ einschließlich der Eigenschaften an. Beispielsweise in C # t => new { t.Id1, t.Id2 } und in Visual Basic .Net Function(t) New From { t.Id1, t.Id2 }.

88
MarcinJuraszek

Frustrierend ist das MSDN VB Beispiel falsch, insbesondere wenn Sie nicht fließend Lambda sprechen. Dies sollte ein 'With' sein, kein 'From'.

(Danke Aki Siponen )

0
saminpa