实体框架核心主键

时间:2019-04-11 21:09:34

标签: c# sqlite ef-core-2.1

在我的商务网络应用中,我有一个表OrderItem,其中在sqlite上设置的主键是

<Id-productId-variant>
id is integer not null
productId is text not null
variant is text null

Variant可为空,因为它是引用Variant表上的外键,其中Variant列不为null,但在我的orderItem表中,我允许插入不带Variant的产品

在sqlite中,插入内容适用于两种情况:带有和不带有变体。

EF Core没有变体时会返回错误

  

由于主键属性“ Variant”为空,因此无法跟踪“ OrderItem”类型的实体。

我该怎么办?

builder.HasKey(e => new { e.Id, e.Codart, e.Codvar });
      ...

        builder
        .HasOne(e => e.Product)
        .WithOne(e => e.OrderItems)
        .HasForeignKey<OrderItems>(e => e.Codart);

        builder
        .HasOne(e => e.Variant)
        .WithOne(e => e.OrderItems)
        .HasForeignKey<OrderItems>(e => new { e.Codart, e.Codvar });


public class Variant
{
    [key]
    public string Codart { get; set; } 
    [key]
    public string Codvar { get; set; }
    public string Descri { get; set; }
}

0 个答案:

没有答案