3

構成を変更するだけで、SQL Server と SQL Server Compact Edition の間でデータ プロバイダーを切り替えることができるようになることを望んでいました。しかし、それは機能せず、EDMX ファイルを見ると、理由がわかると思います。

<edmx:StorageModels>
<Schema ... Provider="System.Data.SqlClient" ...

app.config または実行時にプロバイダーを指定する方法はありますか?

4

2 に答える 2

2

Storage-Model は特定のプロバイダーに関連付けられているため、Entity Framework は、指定されたプロバイダーと互換性のない DbConnection 実装を拒否します。

Entity Framework 接続文字列を見ると、StorageSchema、ModelSchema、および Mapping が 3 つの異なるファイル (.edmx から生成され、アセンブリに埋め込まれている) で指定されていることがわかります。.edmx を分解して、.ssdl、.csdl、および .msl を自分で埋め込み、SQL Server CE 用に別の .ssdl を作成することができます。これは基本的に、プロバイダーといくつかの列タイプをコピーして貼り付けて置き換えるだけです。

私はここについて書きました:比較エンティティ フレームワーク

于 2011-02-24T09:46:34.813 に答える
1

単体テストでは、この方法でスキーマを変更します (メイン コードの実行前に ssdl を変更します)。

コード内:

    var s = Assembly.GetExecutingAssembly().GetManifestResourceStream("Model1.ssdl");
    var ssdlFilePath = "<some-dir>\file1.ssdl";
    using (var file = File.Create(ssdlFilePath))
    {
        StreamUtil.Copy(s, file);
    }
    var str = File.ReadAllText(ssdlFilePath);
    str = str.Replace("old provider token", "ProviderManifestToken=\"4.0\"");
    str = str.Replace("old provider type"", "Provider=\"System.Data.SqlServerCe.4.0\"");
    File.WriteAllText(ssdlFilePath, str);

app.config で:

  <connectionStrings>
    <add name="Database2Entities" connectionString="metadata=res://*/Model1.csdl|<some-dir>\file1.ssdl|res://*/Model1.msl;provider=System.Data.SqlServerCe.4.0;provider connection string=&quot;Data Source=|DataDirectory|\Database1.sdf&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>

できます)

于 2011-06-10T14:54:46.220 に答える