2013-07-11 2 views
0

.net 4.5로 변환 된 프로젝트에 어려움을 겪고 있습니다.EF5에서 동적으로 연결 문자열을 전달하는 방법

나는 다음과 같은 몇 가지 기능을 가지고 있습니다 :

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에서 생성자는 ConnectionString을 더 이상 허용하지 않습니다. 나는 내 엔터티의 부분 클래스를 생성하고, 내 자신의 생성자를 만들려고하지만 나는이 작업 얻을 수 없습니다 : 다른 프로젝트에 대한

Partial Public Class SDWMasterSDWDBEntities 
    Inherits DbContext 

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

을, 나는 다른의 app.config를 사용하여 내 프로젝트 파일을 적용 파일을 각각의 솔루션 구성에 맞게 만들었지 만, 그것은 유지해야 할 피타이며 깨끗한 솔루션이 아닙니다.

내 질문은 : 어떻게 내 개인 Connectionstrings 함께 EF5 사용할 수 있습니까?

이러한 그런데 내 연결 문자열은 다음과 같습니다

 
#If DEBUG Then 
    Friend ConnStringSDW As String = "metadata=res://*/Entities.SDWDB.csdl|res://*/Entities.SDWDB.ssdl|res://*/Entities.SDWDB.msl;provider=System.Data.SqlClient;provider connection string='data source=SDWDB01\SDWSQL;initial catalog=SDWDB_DEV;persist security info=True;user id=usr;password=pwd;multipleactiveresultsets=True;App=EntityFramework'" 
#Else 
    Friend ConnStringSDW As String = "metadata=res://*/Entities.SDWDB.csdl|res://*/Entities.SDWDB.ssdl|res://*/Entities.SDWDB.msl;provider=System.Data.SqlClient;provider connection string='data source=SDWDB01\SDWSQL;initial catalog=SDWDB_PROD;persist security info=True;user id=usr;password=pwd;multipleactiveresultsets=True;App=EntityFramework'" 
#End If 

와 나는 오류를 얻을, 나는이 기능을 실행하면 "엔티티 타입 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 
+0

은 이미 다음을 발견 : http://visualstudiogallery.msdn.microsoft.com/92c0129e-40dc-488c-a836-7e30846dfb30 ? SRC = VSIDE이지만 자동 생성 코드가 생성되는 방식 만 변경됩니다. 나는 이것이 "이전 방식으로 돌아가고 있기 때문에"아직 시도하지 않았으며 Microsoft는 조언을 제공하지 않습니다 ... –

+0

데이터베이스 스키마가 동일하면 디버그 및 릴리스 웹을 사용할 수 있어야합니다. 또는 app configs는 db가 가리키는 db를 변경합니다. – jfin3204

답변

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 
+0

그게 내가하는 일이지만 오류가 계속 발생했습니다 "SDW_USERS_MASTER 엔터티 형식이 현재 컨텍스트에 대한 모델의 일부가 아닙니다." –

관련 문제