实体框架 0 到 1 关系 - 未设置对象引用



开始使用实体框架不久就遇到了一些麻烦。

我有两个表,它们有 0 到 1 的关系。当我从主表(员工)中选择一行时,除非我选择第二个表中没有连接记录的行(状态),否则没问题。如果我这样做,那么当它尝试访问第二个表的属性时,它会抛出"对象引用未设置为对象的实例":

        If Not cls.STATUS_DESC.STAFF_INFO Is DBNull.Value Then
            lblStatusDescription.Text = cls.STATUS_DESC.STAFF_INFO
        End If

我用来获取记录的 LINQ 是:

    Dim account As STAFF =
        (From a In sa.STAFFs
         Where a.STAFF_NO = staffno
         Select a).FirstOrDefault

语句中没有直接引用子表,但是连接是在数据库图中定义的,这允许我引用属性。

确定这是一个非常基本的问题,但就像我说的,我才刚刚开始使用它!

我不确定我是否可以正确解释您的代码,但我认为这与实体框架的延迟加载功能有关。必须显式包含引用才能将其加载到内存中。您可以使用如下Include()方法执行此操作。我假设STATUS_DESC是导航属性的名称。如果我错了,请用实际的替换它:

Dim account As STAFF =
    (From a In sa.STAFFs Where a.STAFF_NO = staffno Select a) _
    .Include("STATUS_DESC") _
    .FirstOrDefault

通过添加以下内容来解决它:

如果不是 cls。STATUS_DESC什么都不是

结束如果

到属性调用,现在我想起来似乎很明显。这是最有效的方法吗,我本以为 EF 能够处理简单的左连接。

最新更新