在不久开始使用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
在语句中没有直接引用子表,但是在数据库图中定义了连接,这允许我引用属性。
我确定这是一个非常基本的问题,但就像我说我刚开始使用它一样!
答案 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能够处理简单的左连接。