Entity Framework 4.1 сначала код + MVC3 и доступ к объектам определенного типа - PullRequest
1 голос
/ 14 мая 2011

Сначала я использую код 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, Entity SQL или другой широко используемый способ) получить все объекты BorrowObject, где BorrowedObject относится к типу Computer?
  2. Как мне отобразить результат запроса к ViewModel под названием "BorrowComputerVM" (используется для создание видов, используемых только для заимствование компьютера).

Вопрос 1 (и вопрос 2) должен быть очень простым, но я уже потратил часы в Google, чтобы найти ответ без результата вообще. Единственное, что я обнаружил, это то, что вы можете получить все компьютеры в ObjectBase, написав context.ObjectBase.OfType (Of Computer), и это не помогает, поскольку вы не можете написать context.BorrowObjects.ObjectBase.OfType (Of Computer)

Пожалуйста, предоставьте образцы кода в VB.NET (если можете), но что более важно: Пожалуйста, убедитесь, что предоставленные вами образцы кода работают без часов модификации!

Ответы [ 2 ]

1 голос
/ 19 мая 2011

Я пишу это на C #:

Как мне сделать запрос (используя LINQ, Entity SQL или другим часто используемым способом) чтобы получить все объекты BorrowObject, где 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.

Операторы is и as действительно работают в LINQ to Entities.

0 голосов
/ 19 мая 2011

В этой статье описывается множество настроек, необходимых для наследования кода TPC, а также некоторые специальные методы, которые необходимо использовать.Все ли это уже сделано?Если вы завершили все кодирование джиу-джитсу, описанное в статье, похоже, что синтаксис запроса или структура объекта не должны представлять для вас особых препятствий.

...