微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

插入后缺少 EF Core 5 外键

如何解决插入后缺少 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 举报,一经查实,本站将立刻删除。