在配置中更改Entity Framework提供程序

4
我希望能够通过配置更改轻松地在SQL Server和SQL Server Compact Edition之间切换数据提供程序。但是它不起作用,看着EDMX文件我想我知道原因了:
<edmx:StorageModels>
<Schema ... Provider="System.Data.SqlClient" ...

有没有办法在app.config或运行时指定提供程序?
2个回答

3
存储模型与特定提供程序相关联,这将导致实体框架拒绝任何与指定提供程序不兼容的DbConnection实现。
如果查看实体框架连接字符串,可以看到存储模式、模型模式和映射在三个不同的文件中指定(这些文件从.edmx生成,然后嵌入程序集中)。您可以拆开.edmx并嵌入.sddl、.csdl和.msl,然后为SQL Server CE创建另一个.sddl。这基本上只是复制粘贴并替换提供程序和一些列类型。
我在这里写过:Comparison Entity Framework

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>

它有效)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接