C# 导航对象为空;为什么?

C# 导航对象为空;为什么?,c#,linq,entity-framework,foreign-key-relationship,C#,Linq,Entity Framework,Foreign Key Relationship,我有一个客户和一个订单表格。订单表包含一个CustomerId字段,该字段指向Customer.Id列。我正在使用以下命令检索订单 var order = (from a in context.Order where a.id == OrderId select a).FirstOrDefault(); 还有另一个审核表也有CustomerId列。我正在审计表中创建一个条目,并希望从上面的查询获取的订单中更新CustomerId,但是,order.customer对象为null。我做错了什么

我有一个客户和一个订单表格。订单表包含一个CustomerId字段,该字段指向Customer.Id列。我正在使用以下命令检索订单

var order = (from a in context.Order 
where a.id == OrderId select a).FirstOrDefault();
还有另一个审核表也有CustomerId列。我正在审计表中创建一个条目,并希望从上面的查询获取的订单中更新CustomerId,但是,order.customer对象为null。我做错了什么?

以下是解决方案:

var order = (from a in context.Order 
where a.id == OrderId select a).FirstOrDefault();
var customer = context.Customer.Find(order.CustomerId);
以下是解决方案:

var order = (from a in context.Order 
where a.id == OrderId select a).FirstOrDefault();
var customer = context.Customer.Find(order.CustomerId);

要包含您的客户数据,您需要包含如下代码所示的表格

var order = (from a in context.Order 
             where a.id == OrderId select a)
                                    .Include(b => b.Customer)
                                    .FirstOrDefault();

然而,订单和客户之间需要有一个链接才能正常工作。

要包含您的客户数据,您需要包含如下代码所示的表格

var order = (from a in context.Order 
             where a.id == OrderId select a)
                                    .Include(b => b.Customer)
                                    .FirstOrDefault();

然而,订单和客户之间需要有一个链接才能起作用。

我猜您的
订单
实体上有一个
客户
导航属性,带有
客户ID
字段。您需要使用
Include
功能明确加载
Customer
实体

var order = (from a in context.Order.Include("Customer") 
where a.id == OrderId select a).FirstOrDefault();

// Check if the result is null
if(order != null)
{
    /// Do stuff...
}

我猜您的
订单
实体上有一个
客户
导航属性,该属性带有
客户ID
字段。您需要使用
Include
功能明确加载
Customer
实体

var order = (from a in context.Order.Include("Customer") 
where a.id == OrderId select a).FirstOrDefault();

// Check if the result is null
if(order != null)
{
    /// Do stuff...
}

是否确定上下文中存在id==OrderId的订单。订单?请检查
OrderId
的值,并检查以确保实际存在id由
OrderId
指定的订单。第二部分是使用数据库工具,而不是实体框架。你只是让EF来做这件事,还是使用DataAnnotations或FluentAPI?这是因为它很懒散。将其更改为WangeLoading。Customer为null,因为您仅从
订单中提取。如果需要客户数据,则需要包括customer表。是否确定上下文中存在id==OrderId的订单。订单?请检查
OrderId
的值,并检查以确保实际存在id由
OrderId
指定的订单。第二部分是使用数据库工具,而不是实体框架。你只是让EF来做这件事,还是使用DataAnnotations或FluentAPI?这是因为它很懒散。将其更改为WangeLoading。Customer为null,因为您仅从
订单中提取。如果需要客户数据,则需要包括客户表。+1。如果它仍然返回
null
您最好检查实体本身。请记住,
FirstOrDefault()
如果找不到任何内容,则返回
null
。实际上,Include不是您在上述语法中放置的选项。但是,我可以使用@DaveB在其回复中建议的Include after context.Order.+1。如果它仍然返回
null
您最好检查实体本身。请记住,
FirstOrDefault()
如果找不到任何内容,则返回
null
。实际上,Include不是您在上述语法中放置的选项。但是,我可以使用@DaveB在其回复中建议的Include after context.Order。