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?
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 .NetFunction(t) New From { t.Id1, t.Id2 }
.
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 )