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 に変換すると、SDCBLonenEntities が ObjectContext から継承されなくなり、DbContext から継承されるため、エラーが発生します。
以前は、接続文字列を渡すことができるコンストラクターが EF によって自動的に作成されていました。ソリューション構成 (デバッグ/リリース) に応じて異なる接続文字列を使用するため、これは非常に簡単です。
EF5 では、コンストラクターは接続文字列を受け入れなくなりました。エンティティの部分クラスを作成し、独自のコンストラクターを作成しようとしましたが、これを機能させることができません:

Partial Public Class SDWMasterSDWDBEntities
    Inherits DbContext

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

別のプロジェクトでは、ソリューション構成ごとに異なる app.config ファイルを使用するように Project-file を調整しましたが、これは維持するのが面倒で、私にとってはクリーンなソリューションではありませんでした。

私の質問は次のとおりです。自分の個人的な接続文字列で 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'"
#そうしないと
    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
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 に答える