我正在为一个转换为 .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