.net core 对具有相同FK的多个表使用EF Core的语句

.net core 对具有相同FK的多个表使用EF Core的语句,.net-core,entity-framework-core,.net Core,Entity Framework Core,我不确定为什么我在下面的代码中收到PurchaseOrderHistory中用户的空值。我认为这与PurchaseOrder也包含用户ID有关。我不明白的是,如果PurchaseOrder和PurchaseOrderHistory的用户ID相同,那么它就会出现。我已附上剪报澄清 var purchaseOrder = await _context.PurchaseOrder .Include(p => p.Division) .Include

我不确定为什么我在下面的代码中收到PurchaseOrderHistory中用户的空值。我认为这与PurchaseOrder也包含用户ID有关。我不明白的是,如果PurchaseOrder和PurchaseOrderHistory的用户ID相同,那么它就会出现。我已附上剪报澄清

var purchaseOrder = await _context.PurchaseOrder
            .Include(p => p.Division)
            .Include(p => p.PaymentType)
            .Include(p => p.Status)
            .Include(p => p.Vendor)
            .Include(p => p.ItemServiceLine)
            .Include(p => p.PurchaseOrderHistory)
            .Include(p => p.User)
            .FirstOrDefaultAsync(m => m.ID == id);

我不明白的是,如果PurchaseOrder和PurchaseOrderHistory的用户ID相同,那么它就会出现


如果更改跟踪器已经有一个用户实体,其用户ID与PurchaseOrderHistory.UserID匹配,它将“修复”导航属性。

您包括
PurchaseOrder
用户
,而不是
PurchaseOrderHistory
。如果两个用户ID相同,关系修复程序也将填充
PurchaseOrderHistory
user
,因为它附加到上下文

您打算做的是:

var purchaseOrder=await\u context.purchaseOrder
.包括(p=>p.Division)
.包括(p=>p.PaymentType)
.包括(p=>p.Status)
.包括(p=>p.供应商)
.Include(p=>p.ItemServiceLine)
.Include(p=>p.User)
.Include(p=>p.PurchaseOrderHistory)
.ThenClude(poh=>poh.User)
.FirstOrDefaultAsync(m=>m.ID==ID);

就是这样。如果OP希望始终包含购买历史记录中的用户,他们需要执行
。包含(p=>p.PurchaseOrderHistory)。然后包括(poh=>poh.User)
,如果OP从不希望有PurchaseOrderHistory.User填充,那么。。。我不知道,那你就是不表现出来。这也可能意味着,如果您将其自动序列化到外部,则删除它们。这个修正是一个严重的bug(虽然很可能是“按设计工作,设计师应该被解雇”),因为如果我不告诉它扩展,那么我就不希望它扩展。Fixup应该知道扩展路径。您的问题到底是什么,您永远不希望用户与PurchaseHistory一起使用,还是一直都想要?