【发布时间】:2020-08-12 09:11:21
【问题描述】:
在为每个实体添加基类 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; }
}
public class OrderProduct : BaseModel
{
public int OrderId { get; set; }
public Order Order { get; set; }
public int ProductId { get; set; }
public Product Product { get; set; }
}
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);
/*...*/
}
【问题讨论】: