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