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

时间:2012-12-13 10:02:52

标签: vb.net entity-framework

在不久开始使用Entity Framework时遇到了一些麻烦。

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

        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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

通过添加:

来解决这个问题

如果不是cls.STATUS_DESC那么

结束如果

到属性调用,这看起来相当明显,现在我考虑一下。这是最有效的方式,我会认为EF能够处理简单的左连接。