У меня есть общий репозиторий, с которым я общаюсь с моим контекстом объекта. В моем объектном контексте есть функции импорта, которые я хочу вызывать через мой общий репозиторий. В настоящее время я вызываю их через функцию Execute
, но это не идеально, потому что мне приходится передавать имя и параметры моей функции в виде строк, которые могут вызвать исключения во время выполнения. Моя функция импортирует карту в сложные типы.
Есть ли способ сделать что-то похожее на:
Dim rep As IRepository(Of ComplexType)
Dim type As ComplexType = rep.Find(where:=Function(t) t.FunctionImport(parm, parm)).First()
Вот мой общий репозиторий:
Public Class EFRepository(Of T As Class)
Implements IRepository(Of T)
Private _context As ObjectContext
Private _objectSet As IObjectSet(Of T)
Private _objectResult As ObjectResult(Of T)
Private ReadOnly Property Context() As ObjectContext
Get
If _context Is Nothing Then
_context = New SupportSiteContainer()
End If
Return _context
End Get
End Property
Private ReadOnly Property ObjectSet() As IObjectSet(Of T)
Get
If _objectSet Is Nothing Then
_objectSet = Me.Context.CreateObjectSet(Of T)()
End If
Return _objectSet
End Get
End Property
Public Function GetQuery() As IQueryable(Of T) Implements IRepository(Of T).GetQuery
Return ObjectSet
End Function
Public Function GetAll() As IEnumerable(Of T) Implements IRepository(Of T).GetAll
Return GetQuery().ToList()
End Function
Public Function Find(ByVal where As Func(Of T, Boolean)) As IEnumerable(Of T) Implements IRepository(Of T).Find
Return Me.ObjectSet.Where(where)
End Function
Public Function [Single](ByVal where As Func(Of T, Boolean)) As T Implements IRepository(Of T).[Single]
Return Me.ObjectSet.[Single](where)
End Function
Public Function First(ByVal where As Func(Of T, Boolean)) As T Implements IRepository(Of T).First
Return Me.ObjectSet.First(where)
End Function
Public Sub Delete(ByVal entity As T) Implements IRepository(Of T).Delete
Me.ObjectSet.DeleteObject(entity)
End Sub
Public Sub Add(ByVal entity As T) Implements IRepository(Of T).Add
Me.ObjectSet.AddObject(entity)
End Sub
Public Sub Attach(ByVal entity As T) Implements IRepository(Of T).Attach
Me.ObjectSet.Attach(entity)
End Sub
Public Sub SaveChanges() Implements IRepository(Of T).SaveChanges
Me.Context.SaveChanges()
End Sub
Public Function Execute(ByVal functionName As String, ByVal ParamArray parameters() As System.Data.Objects.ObjectParameter) As ObjectResult(Of T) Implements IRepository(Of T).Execute
Return Me.Context.ExecuteFunction(Of T)(functionName, parameters)
End Function
End Class