Я следую той же статье, как указано ниже Управление 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