Как загрузить свойства навигации с помощью объектов POCO в EF, управляя продолжительностью жизни ObjectContext? - PullRequest
1 голос
/ 05 октября 2011

Я следую той же статье, как указано ниже Управление Entity Framework ObjectContext продолжительности жизни .

Я генерирую сущности из своего файла EDMX с помощью инструмента «POCO Entity Generator» и помещаю все сущностив библиотеке классов.У меня есть модель (EDMX) в отдельной библиотеке классов.

Я ссылался на Test.Entities.dll и Test.Model.dll в моей библиотеке классов слоя доступа к данным.В моей библиотеке классов есть классы UnitOfWorkScope и FacadeBase, которые заботятся о моем ObjectContext.а все остальные классы унаследованы от класса FacadeBase.

Public Class WorkOrderDAL
    Inherits FacadeBase(Of Test.Entities.WorkOrder)

Вот здесь FacadeBase

Public MustInherit Class FacadeBase(Of T As System.Data.Objects.DataClasses.EntityObject)
    Private _objectContextManager As ObjectContextManager(Of Test.Model.MyDataContext)

Вот один из классов сущностей в Test.Entities.dll.

Partial Public Class WorkOrder
    Inherits Global.System.Data.Objects.DataClasses.EntityObject

У меня есть скомпилированный запрос в моем DataAceessLayer, но Он не возвращает свойства навигации, связанные с объектом .Вот пример этого.

    ReadOnly qWorkOrderIDByWorkOrderID As Func(Of LAITEntities, Integer, IQueryable(Of WorkOrder)) = _
CompiledQuery.Compile(Of LAITEntities, Integer, IQueryable(Of WorkOrder))( _
          Function(LAIT As LAITEntities, WorkOrderID As Integer) _
              LAIT.WorkOrder.Include("Customer") _
                            .Include("Computer") _
                            .Include("Computer.Condition") _
                            .Include("Computer.Device") _
                            .Include("Computer.Brand") _
                            .Include("Computer.OS") _
                            .Where(Function(w) w.WorkOrderID = WorkOrderID))

Public Function SelectByWorkOrderID(ByVal WorkOrderID As Integer) As WorkOrder
    Dim _result = qWorkOrderIDByWorkOrderID.Invoke(ObjectContext, WorkOrderID).AsEnumerable.SingleOrDefault
    Return _result
End Function
...