LINQ Parent类查询db以查找子类中的字段

时间:2017-11-14 21:22:21

标签: vb.net entity-framework linq

我使用EF 6.1.3和.NET framework 4.5.2

我正在更新使用两个类的代码:

Public Class Holder
    <Key(), Column(Order:=0)>
    Property Holder_No As Integer?

    <Key(), Column(Order:=1)>
    Property Title_No As Integer?

    Property Family_Name As String
    Property Given_Name_1 As String
    Property Given_Name_2 As String
End Class

Public Class OwnerChange
    Inherits Holder
    Public Property Change_Type As String
    Public Property Change_Date As Date
    Public Property Process_Date As Date?
End Class

Holder类与db中的表格进行1:1映射。

DbContext只为Holder类创建一个dbSet。

Public Property Holder As DbSet(Of Holder)

当我创建一个简单的查询来访问db中holder表的数据时,我得到了change_type,change_date和process_date的列错误。

Using contextdb = New userContext()
     Dim att1 = (From b In contextdb.Holder
                             Select b).Take(10)
End Using

该查询似乎认为我试图在子表中查询子类&#39;信息。

为什么LINQ会从父类中请求孩子们的列&#39;数据库中的表?我是否需要做一些事情来指定我只想检索持有人信息?

1 个答案:

答案 0 :(得分:0)

当一个类从另一个类继承时,实体框架显然会创建一个层次结构。因此,当我查询持有者记录时,它正在持有者表中查找OwnerChange类中的元素。

我需要做的是获取holder类并将其转换为抽象类,然后将其继承到我想访问数据库中不同表的两个类中。

Public MustInherit Class base_class
<Key(), Column(Order:=0)>
Property Holder_No As Integer?

<Key(), Column(Order:=1)>
Property Title_No As Integer?

Property Family_Name As String
Property Given_Name_1 As String
Property Given_Name_2 As String
End Class

Public Class OwnerChange
    Inherits base_class
    Public Property Change_Type As String
    Public Property Change_Date As Date
    Public Property Process_Date As Date?
End Class

Public Class holder
    Inherits base_class
End Class

更改类层次结构最终解决了问题。