C#-实体框架核心-多对多关系错误

C#-实体框架核心-多对多关系错误,c#,entity-framework-core,C#,Entity Framework Core,在我为每个实体添加基类BaseModel之后,我得到了每个多对多实体关系的下一个错误(在本例中是OrderProduct): System.InvalidOperationException:无法在“OrderProduct”上配置密钥,因为它是派生类型。必须在根类型“BaseModel”上配置密钥。如果您不打算将“BaseModel”包含在模型中,请确保它未包含在您上下文中的DbSet属性中,未在对ModelBuilder的配置调用中引用,也未从模型中包含的类型的导航属性中引用。 添加基类时是

在我为每个实体添加基类
BaseModel
之后,我得到了每个多对多实体关系的下一个错误(在本例中是OrderProduct):

System.InvalidOperationException:无法在“OrderProduct”上配置密钥,因为它是派生类型。必须在根类型“BaseModel”上配置密钥。如果您不打算将“BaseModel”包含在模型中,请确保它未包含在您上下文中的DbSet属性中,未在对ModelBuilder的配置调用中引用,也未从模型中包含的类型的导航属性中引用。

添加基类时是否遗漏了一些内容

以下是实体:

public class BaseModel
{
    public DateTime? CreatedAt { get; set; }
    public User CreatedBy { get; set; }
    public int? CreatedById { get; set; }
}
公共类顺序:BaseModel
{
/*...*/ 
公共IList OrderProducts{get;set;}
}
公共类产品:BaseModel
{
/*...*/
公共IList OrderProducts{get;set;}
}
下面是我在上下文类中的实体配置:

protected override void OnModelCreating(ModelBuilder builder)
{
    /*...*/
    builder.Entity<OrderProduct>()
        .HasKey(u => new { u.OrderId, u.ProductId });

    builder.Entity<OrderProduct>()
        .HasOne(u => u.Order)
        .WithMany(u => u.OrderProducts)
        .HasForeignKey(u => u.OrderId);

    builder.Entity<OrderProduct>()
        .HasOne(u => u.Product)
        .WithMany(u => u.OrderProducts)
        .HasForeignKey(u => u.ProductId);
    /*...*/
}
模型创建时受保护的覆盖无效(ModelBuilder)
{
/*...*/
builder.Entity()
.HasKey(u=>new{u.OrderId,u.ProductId});
builder.Entity()
.HasOne(u=>u.Order)
.有许多(u=>u.OrderProducts)
.HasForeignKey(u=>u.OrderId);
builder.Entity()
.HasOne(u=>u.Product)
.有许多(u=>u.OrderProducts)
.HasForeignKey(u=>u.ProductId);
/*...*/
}

根据错误,
OrderProduct
中不能有键,因为它继承了
BaseModel
,并且键应该在基类(
BaseModel
)中。如果您希望它位于
OrderProduct
中,请通过不在任何
数据库集
OnModelCreating
中将
基本模型
从模型中排除(这样您就不会调用
实体
或类似内容)


在您的情况下,我只需要在
BaseModel

中有一个键(ID)字段,谢谢您的回答!
public class Order : BaseModel
{
    /*...*/ 
    public IList<OrderProduct> OrderProducts { get; set; }
}
public class Product : BaseModel
{
    /*...*/
    public IList<OrderProduct> OrderProducts { get; set; }
}
protected override void OnModelCreating(ModelBuilder builder)
{
    /*...*/
    builder.Entity<OrderProduct>()
        .HasKey(u => new { u.OrderId, u.ProductId });

    builder.Entity<OrderProduct>()
        .HasOne(u => u.Order)
        .WithMany(u => u.OrderProducts)
        .HasForeignKey(u => u.OrderId);

    builder.Entity<OrderProduct>()
        .HasOne(u => u.Product)
        .WithMany(u => u.OrderProducts)
        .HasForeignKey(u => u.ProductId);
    /*...*/
}