web-dev-qa-db-fra.com

Entity Framework Plusieurs colonnes en tant que clé primaire par Api Fluent

Ce sont mes classes de domaine simplifiées.

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

Ceci est ma classe de mapping. Mais ça ne marche pas.

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

Comment dois-je mapper ces classes à fournir, de sorte qu'un produit puisse être vu dans plusieurs catégories?

42
Barış Velioğlu

Utilisez un objet de type anonyme au lieu de 2 instructions séparées:

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

À partir de MSDN: EntityTypeConfiguration.HasKey, méthode

Si la clé primaire est composée de plusieurs propriétés, spécifiez un type anonyme, y compris les propriétés. Par exemple, dans C # t => new { t.Id1, t.Id2 } et dans Visual Basic .Net Function(t) New From { t.Id1, t.Id2 }.

88
MarcinJuraszek

Frustrant, en particulier si vous ne parlez pas couramment lambda, l'exemple MSDN VB est erroné ... cela devrait être un "Avec", pas un "De".

(Merci Aki Siponen )

0
saminpa