使用Fluent Api的实体框架多列为主键

本文关键字:框架 Fluent Api 实体 使用 | 更新日期: 2023-09-27 18:04:31

这些是我简化的域类

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

我应该如何映射这些类来提供,以便一个产品可以在多个类别中看到?

使用Fluent Api的实体框架多列为主键

使用匿名类型对象代替两个分隔语句:

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

来自Microsoft Docs: EntityTypeConfiguration。HasKey方法

如果主键由多个属性组成,则指定包含这些属性的匿名类型。例如,在c# t => new { t.Id1, t.Id2 }和Visual Basic . net Function(t) New With { t.Id1, t.Id2 }中。