0

我正在为一个转换为 .net 4.5 的项目而苦苦挣扎。

我有一些这样的功能:

Public Shared Function Load(iJaar As Integer, iKwartaal As Integer) As List(Of LoonDetail_121)
    Dim oLoonDetails As New List(Of LoonDetail_121)
    Try
         Dim oDB As New SDWMasterSDWDBEntities(DBConnections.ConnStringPrisma)
         Dim dStartDate As New Date(iJaar, ((iKwartaal - 1) * 3) + 1, 1)
         Dim dEndDate As New Date(iJaar, ((iKwartaal - 1) * 3) + 4, 1)

         oLoonDetails = oDB.LoonDetail_121.Where(Function(x) x.EindPeriode_121 >= dStartDate And
                                              x.EindPeriode_121 < dEndDate).ToList
     Catch ex As Exception
         Throw New Exception(GetCurrentMethod.Name & " " & ex.Message)
     End Try
     Return oLoonDetails
 End Function

当我将此函数转换为 EF5 时,出现错误,因为我的 SDCDBLonenEntities 不再从 ObjectContext 继承,而是从 DbContext 继承。
之前,EF 自动创建了一个构造函数,我可以在其中传递我的连接字符串。这很容易,因为我使用不同的连接字符串,具体取决于我的解决方案配置(调试/发布)。
在 EF5 中,构造函数不再接受 Connectionstrings。我试图创建我的实体的一个部分类,并创建我自己的构造函数,但我无法让它工作:

Partial Public Class SDWMasterSDWDBEntities
    Inherits DbContext

    Public Sub New(sConnString As String)
        MyBase.New(sConnString)
    End Sub
End Class

对于另一个项目,我调整了我的项目文件以对每个解决方案配置使用不同的 app.config 文件,但这是一个需要维护的皮塔,对我来说不是一个干净的解决方案。

所以我的问题是:如何将 EF5 与我自己的个人连接字符串一起使用?

顺便说一下,这些是我的连接字符串:

#如果调试然后
    朋友 ConnStringSDW As String = "metadata=res://*/Entities.SDWDB.csdl|res://*/Entities.SDWDB.ssdl|res://*/Entities.SDWDB.msl;provider=System.Data. SqlClient;提供者连接字符串='数据源=SDWDB01\SDWSQL;初始目录=SDWDB_DEV;持久安全信息=True;用户id=usr;密码=pwd;multipleactiveresultsets=True;App=EntityFramework'"
#别的
    朋友 ConnStringSDW As String = "metadata=res://*/Entities.SDWDB.csdl|res://*/Entities.SDWDB.ssdl|res://*/Entities.SDWDB.msl;provider=System.Data. SqlClient;提供者连接字符串='数据源=SDWDB01\SDWSQL;初始目录=SDWDB_PROD;持久安全信息=True;用户id=usr;密码=pwd;multipleactiveresultsets=True;App=EntityFramework'"
#万一

当我执行此函数时,我收到错误“实体类型 SDW_USERS_MASTER 不是当前上下文模型的一部分。”:

Public Shared Function LoadAll() As List(Of SDW_USERS_MASTER)
    Dim oUsers As New List(Of SDW_USERS_MASTER)
    Try
        Using oDB As New SDWMaster.SDWMasterSDWDBEntities(DBConnections.ConnStringSDW)
            oUsers = (From tmpUsers In oDB.SDW_USERS_MASTER
                         Select tmpUsers).ToList.OrderBy(Function(x) x.Login).ToList
        End Using
    Catch ex As Exception
        Debug.Print(ex.Message)
        Throw New Exception(GetCurrentMethod.Name & " " & ex.Message)
    End Try
    Return oUsers
End Function
4

1 回答 1

0

创建一个与上下文同名的新部分类,然后重载构造函数。因此,如果您的上下文类名为“myContext”,那么您将拥有:

Imports System
Imports System.Data.Entity
Imports System.Data.Entity.Infrastructure
Imports System.Data.Objects
Imports System.Data.Objects.DataClasses
Imports System.Linq

Partial Public Class myContext
  Inherits DbContext

  Public Sub New(connectionString As String)
    MyBase.New(connectionString)
  End Sub

End Class
于 2013-07-11T12:28:35.703 回答