Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用EntityFramework4.0创建通用存储库的方法是什么,在这里我有函数导入?_C#_Asp.net Mvc_Vb.net_Design Patterns_Entity Framework - Fatal编程技术网

C# 使用EntityFramework4.0创建通用存储库的方法是什么,在这里我有函数导入?

C# 使用EntityFramework4.0创建通用存储库的方法是什么,在这里我有函数导入?,c#,asp.net-mvc,vb.net,design-patterns,entity-framework,C#,Asp.net Mvc,Vb.net,Design Patterns,Entity Framework,我有一个与对象上下文通信的通用存储库。我的对象上下文具有我希望能够通过我的通用存储库调用的函数导入。目前我通过Execute函数调用它们,但这并不理想,因为我必须将函数名和参数作为字符串传递,这可能会导致运行时异常。我的函数将映射导入复杂类型 有没有类似的方法: Dim rep As IRepository(Of ComplexType) Dim type As ComplexType = rep.Find(where:=Function(t) t.FunctionImport(parm, p

我有一个与对象上下文通信的通用存储库。我的对象上下文具有我希望能够通过我的通用存储库调用的函数导入。目前我通过
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

可以使用通用存储库,但不要过度使用它们。如果您具有特定于实体的功能,则可以对通用接口进行子类型划分,并使用所需的特定于类型的功能对其进行扩展。

方法是编写较短的问题标题。