插入后缺少 EF Core 5 外键

问题描述

当我尝试插入新记录时,我遇到了一个令人困惑的问题。 (EF Core 5,代码优先)

我正在使用以下模型。如您所见,有几个表继承自 LineBase 类。这家伙与 ItemTransaction 表有双向关联。

abstract public class RecordBase
{
    public Guid Id { get; set; }
}
public class Item : RecordBase
{
    public string name { get; set; }
}
[NotMapped]
public abstract class LineBase : RecordBase
{
    public Guid ItemId { get; set; }
    public Item Item { get; set; }
    public string Unit { get; set; }
    public double Qty { get; set; }
    public virtual ICollection<ItemTransaction> ItemTransactions { get; set; }
}
public abstract class OrderLineBase : LineBase
{
    public string OrderNum { get; set; }
}
public abstract class JournalLineBase : LineBase
{
    public string JournalNum { get; set; }
}
public class SalesOrderLine : OrderLineBase
{
    public string CustomerNum { get; set; }
}
public class PurchOrderLine : OrderLineBase
{
    public string CustomerNum { get; set; }
}
public class WmsJournalLine : JournalLineBase
{
    public string Warehouse { get; set; }
}
public class ItemTransaction : RecordBase
{
    public DateTime TransDateTime { get; set; }
    public virtual LineBase Line { get; set; }
}

到目前为止一切顺利。应用迁移后,一切看起来都不错。数据库表已按预期创建。这意味着 ItemTransaction 表从 LineBase (SalesOrderLine,PurchOrderLine,WmsJournalLine)

获取所有子类的正确外键

所以我想出了第一个测试来确保一切正常。

var item = new Item()
{
    name = "Test Item"
};



var soLine = new SalesOrderLine()
{
    CustomerNum = "4711",Item = item,OrderNum = "SO0001",Qty = 6,Unit = "PCS"
};



var iTrans = new ItemTransaction()
{
    TransDateTime = DateTime.Now,Line = soLine
};




context.Item.Add(item);
context.SalesOrderLine.Add(soLine);
context.ItemTransaction.Add(iTrans);



context.SaveChanges();

在调试期间,我注意到 ItemTransaction.Line 获得了对我的 SalesOrderLine 对象的引用。 但是在我的表中插入 ItemTransaction.SalesOrderLineId 列后,它的值是空值。

所以可能缺少一些我无法弄清楚的 DbContext 配置。 也许 [NotMapped]LineBase 属性会导致这种行为。这是我在模型中更改的最后一步。在数据库中创建新表“LineBase”之前,但我绝对不想要该表。它应该只将属性下推到它的子类。

任何人都可以帮助我做我能做的事情,使我的 ItemTransaction 记录插入正确的外键

编辑:通过 SalesOrderLine.ItemTransactions.Add(itemTransaction) 插入将按预期工作。但我仍然担心相反的方向,这对我们的应用程序非常重要

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)