c# - Linq 到实体。空引用异常

标签 c# entity-framework linq-to-entities

我使用 VS 2008 和 ado.net EF。我有两个表:

Shifts(SH_Id, WorkshopId,TabNum)
Workshops(WH_ID, WH_Name)

链接到研讨会的类次(WorkshopId -- WH_ID)我正在尝试编写查询:

var data = _Context.Shifts.Where(w => w.TabNum == 1).First();
var workshop = data.Workshops.WH_ID;

它返回 NullReferenceException。 但以下代码返回 WH_ID:

        var data2 = (from o in _Context.Shifts
                    where o.TabNum == 1
                    select new
                    {
                        wh_id = o.Workshops.WH_Id

                    });

        var workshop = data2.First().Workshops.wh_id;

为什么 data.Workshops.WH_ID 返回 NullReferenceException?

最佳答案

发生这种情况是因为 Entity Framework 没有从查询中返回附加的实体。

这对第二个示例起作用的原因是因为整个查询被转换为 SQL 并在服务器上运行。

尝试解决这个问题

var data = _Context.Shifts.Include("Workshops").Where(w => w.TabNum == 1).First();

甚至

var data = _Context.Shifts.Include("Workshops").First(w => w.TabNum == 1);

关于c# - Linq 到实体。空引用异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22456214/

相关文章:

c# - 将 2 个表映射到 Entity Framework 中的单个实体

c# - 根据条件降序排列

asp.net-mvc - 我想查看 ASP.NET MVC 应用程序生成的 SQL?

c# - 在unity3D中显示数学方程

c# - 使用命名管道的 C++ 和 C# 通信

c# - 当 Entity Framework 中值为 null 时转换为默认值

entity-framework - ObjectContext.Connection.BeginTransaction() 是否使用 MSDTC?

c# - 检查是否存在<li>

c# - 在两个 asp.net MVC web 应用程序之间传递非 ASCII 字符将不会被识别

datetime - Linq-to-Entities:选择查询表达式中的日期格式