实体框架4.1代码首先是+ MVC3并访问某种类型的实体

时间:2011-05-13 21:00:34

标签: vb.net asp.net-mvc-3 linq-to-entities ef-code-first entity-framework-4.1

我首先使用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. 如何进行查询(使用LINQ, 实体SQL或其他常用的 方式)获取所有BorrowObjects BorrowedObject的类型是Computer?
  2. 如何映射查询结果 调用ViewModel “BorrowComputerVM”(用于 创建仅用于的视图 借用电脑)。
  3. 问题1(和问题2)应该非常简单,但我已经花了几个小时在Google上找到一个完全没有结果的答案。我发现的唯一一件事就是你可以通过编写context.ObjectBase.OfType(Of Computer)来获取ObjectBase中的所有计算机,但这无济于事,因为你无法编写context.BorrowObjects.ObjectBase.OfType(Of Computer)

    请在VB.NET中提供代码示例(如果可以的话),但更重要的是:请确保您提供的代码示例无需修改数小时即可工作!

2 个答案:

答案 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();
如果您投射到新类型,则不需要

IncludesUserComputer也会在BorrowComputerVM中加载,而不会显式Include。< / p>

isas运算符确实在LINQ to Entities中工作。

答案 1 :(得分:0)

This article描述了代码优先TPC继承所需的许多配置,以及您需要使用的一些特殊技术。所有这些都已经完成了吗?如果你已经完成了文章中描述的所有编码jujitsu,那么查询语法或对象结构似乎不会给你带来太多障碍。