1

我使用實體框架4.1代碼第一+ MVC3和,我使用的傳承戰略研究是TPC實體框架4.1代碼第一+ MVC3和訪問特定類型的實體

我有以下類

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是計算機類型?
  2. 如何映射查詢 到視圖模型的結果稱爲 「BorrowComputerVM」(用於僅用於 創建視圖借用計算機)。

問題1(和問題2)應該非常簡單,但我已經在Google上花了幾個小時找到一個沒有結果的答案。我發現的唯一的事情是你可以通過編寫context.ObjectBase.OfType(Of Computer)來獲得ObjectBase中的所有計算機,並且這沒有幫助,因爲你無法編寫context.BorrowObjects.ObjectBase.OfType(Of Computer)

請提供VB.NET代碼示例(如果可以的話),但更重要的是:請確保您提供的代碼樣本不需要修改幾個小時!

回答

1

我把它寫在C#:

我如何做一個查詢(使用LINQ,實體SQL或其他常用的方法) 讓所有BorrowObjects其中 BorrowedObject是 類型的計算機?

var list = context.BorrowObjects.Include(b => b.BorrowedObject) 
        .Where(b => b.BorrowedObject is Computer) 
        .ToList(); 

可以省略Include如果你不想急於負載Computer

如何映射查詢到視圖模型的結果稱爲 「BorrowComputerVM」(用於創建僅用於借用 計算機 意見)。 UserComputer將在BorrowComputerVM,也可以加載沒有明確Include

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如果你投射到一個新的類型是沒有必要的。

isas運營商確實在LINQ to Entities中工作。

+0

嗯,我知道這很簡單......但這很簡單!謝謝! – Thomas 2011-05-22 21:10:10

0

This article描述了許多代碼優先TPC繼承所需的配置,以及一些您需要使用的特殊技術。所有這些都已經完成了嗎?如果你已經完成了文章中描述的所有編碼jujitsu,看起來查詢語法或對象結構不應該給你造成很大的障礙。

+0

你好!我已經閱讀過這篇文章(其他幾篇文章),TPC正在努力工作。我需要的是幫助我的問題中描述的代碼語法。請提供一個代碼示例。 – Thomas 2011-05-19 06:41:17