sqlite 实体框架核心主键

yizd12fk  于 2022-11-14  发布在  SQLite
关注(0)|答案(1)|浏览(185)

在我的商务Web应用程序中,我有一个表OrderItem,其中在SQLite上设置了主键

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

VARIANT可以为空,因为它引用了VARIANT表上的外键,其中VARIANT列不为空,但在我的orderItem表中,我允许插入不带VARIANT的产品
在SQLite中,插入在两种情况下都可以很好地工作:使用和不使用变量。
如果没有变量,EF Core将返回错误
无法跟踪类型为‘OrderItem’的实体,因为主键属性‘Variant’为空。
我能做什么?

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

erhoui1w1#

试试这个:

public class Variant
{

    public Variant() 
    {
       Codart = Guid.NewGuid().ToString();
       Codvar = Guid.NewGuid().ToString();
       // Guid.NewGuid().ToString(), that's for every Key non nullable
    }

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

相关问题