我首先使用Entity Framework 4.1代码+ MVC3,我使用的继承策略是TPC
我有以下课程
Public Class ObjectBase
<Key()>
Public Property Id As Integer
Public Property Description As String
End Class
Public Class Computer
Inherits ObjectBase
Public Property Computername As String
End Class
Public Class Book
Inherits ObjectBase
Public Property BookName As String
End Class
Public Class User
<Key()>
Public Property Id As Integer
Public Property Name As String
End Class
Public Class BorrowObject
<Key()>
Public Property Id As Integer
Public Property User As User
Public Property BorrowedObject as ObjectBase
End Class
Public Class BorrowComputerVM
<Key()>
Public Property Id As Integer
Public Property User As User
Public Property Computer as Computer
End Class
我的问题是:
问题1(和问题2)应该非常简单,但我已经花了几个小时在Google上找到一个完全没有结果的答案。我发现的唯一一件事就是你可以通过编写context.ObjectBase.OfType(Of Computer)来获取ObjectBase中的所有计算机,但这无济于事,因为你无法编写context.BorrowObjects.ObjectBase.OfType(Of Computer)
请在VB.NET中提供代码示例(如果可以的话),但更重要的是:请确保您提供的代码示例无需修改数小时即可工作!
答案 0 :(得分:1)
我用C#编写:
如何进行查询(使用LINQ,Entity SQL或其他常用方法) 将所有BorrowObjects放到哪里 BorrowedObject属于类型 计算机?
var list = context.BorrowObjects.Include(b => b.BorrowedObject)
.Where(b => b.BorrowedObject is Computer)
.ToList();
如果您不想急切加载Include
,则可以省略Computer
。
如何将查询结果映射到调用的ViewModel “BorrowComputerVM”(用于创建 仅用于借用的观点 计算机)。
var list = context.BorrowObjects
.Where(b => b.BorrowedObject is Computer)
.Select(b => new BorrowComputerVM
{
Id = b.Id,
User = b.User,
Computer = b.BorrowedObject as Computer
})
.ToList();
如果您投射到新类型,则不需要 Includes
:User
和Computer
也会在BorrowComputerVM
中加载,而不会显式Include
。< / p>
is
和as
运算符确实在LINQ to Entities中工作。
答案 1 :(得分:0)
This article描述了代码优先TPC继承所需的许多配置,以及您需要使用的一些特殊技术。所有这些都已经完成了吗?如果你已经完成了文章中描述的所有编码jujitsu,那么查询语法或对象结构似乎不会给你带来太多障碍。