Модель EF4 работает с SQL Server, но не с SQL Server CE - PullRequest
0 голосов
/ 30 марта 2012

Я сгенерировал модель EF4 из существующей базы данных SQL Server 2008 R2.Все работает нормально, когда я подключаюсь к этой базе данных.Теперь я хотел подключиться к базе данных SQL Server Compact Edition 4.0, которую я сгенерировал из существующей базы данных SQL Server (и обновил ее с 3.5 до 4.0).Всякий раз, когда я хочу подключиться к этой базе данных, я получаю следующую ошибку:

Объект типа "System.Data.SqlServerCe.SqlCeConnection" не может быть преобразован в тип "System.Data.SqlClient.SqlConnection."

Следующие два свойства определяют контекст DataModel, который я использую для доступа к данным:

Public ReadOnly Property EntityConnection As String
  Get
    ' Supply the additional values.
    ' Specify the provider name, server and database. 
    Dim providerName As String = If(DienstplanEnvironment.IsCompact, "System.Data.SqlServerCe.4.0", "System.Data.SqlClient")

    ' Build the SqlConnection connection string. 
    ' Initialize the EntityConnectionStringBuilder. 
    Const STR_DataModelName As String = "DPModel"   ' <= Name des Daten-Modells im Projekt
    Const STR_SubFolder As String = "DataModels"    ' <- Unterverzeichnis des Datenmodells im Projekt

    Dim Metadata As String = String.Format("res://*/{0}.{1}.csdl|res://*/{0}.{1}.ssdl|res://*/{0}.{1}.msl", STR_SubFolder, STR_DataModelName)

    Dim entityBuilder As New EntityClient.EntityConnectionStringBuilder() With {.Provider = providerName,
                                                                                .ProviderConnectionString = SqlConnectionString,
                                                                                .Metadata = Metadata}

    Return entityBuilder.ToString
  End Get
End Property

Public ReadOnly Property DienstplanEntities() As DienstplanEntities
  Get
    Return New DienstplanEntities(EntityConnection)
  End Get
End Property

Поэтому, когда я пытаюсь получить некоторые данные, например:

Private Sub ReadBenutzerWindowPropertiesFromContext(BenutzerId As Integer, ByVal Force As Boolean)
    If _blnWinPropLoad Or Force Then
      Using Context = My.DienstplanEntities
        For Each item In From e In Context.ProfileSet Where e.USID = BenutzerId Order By e.WinKey Select e
          With WindowProperties.Item(ProfileHandling.ConvertWinKey(item.WinKey))
            .ActualLocation = New Point(item.WinX, item.WinY)
            .ActualSize = New Size(item.WinW, item.WinH)
            .FormWindowState = CType(item.WinState, Windows.Forms.FormWindowState)
            .IsLoaded = item.isvisible
          End With
        Next
      End Using
    End If
  End Sub

Я получу это сообщение об ошибке.Насколько я понимаю, модель EF4 не зависит от конкретного поставщика (не имеет никакого смысла).Так где я ошибся?Нужно ли создавать другую модель EF4 из базы данных SQL Server CE?

...