0

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

我有两个具有 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

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

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

4

2 回答 2

0

通过添加解决它:

If Not cls.STATUS_DESC 什么都没有,那么

万一

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

于 2012-12-13T10:47:33.183 回答
0

I'm not sure if I can interpret your code correctly but I think it has to do with the Lazy Loading feature of Entity Framework. You must explicitly include the reference to load it into memory. You can to this by using the Include() method as below. I assume that STATUS_DESC is the name of the navigation property. Replace it with the actual one if I'm wrong:

Dim account As STAFF =
    (From a In sa.STAFFs Where a.STAFF_NO = staffno Select a) _
    .Include("STATUS_DESC") _
    .FirstOrDefault
于 2012-12-13T10:06:53.043 回答