我希望能夠通過配置更改將數據提供程序切換到SQL Server和SQL Server Compact Edition或從SQL Server Compact Edition切換數據提供程序。但它不以EDMX文件,我想我可以看到,爲什麼工作和尋找:在配置中更改實體框架提供程序
<edmx:StorageModels>
<Schema ... Provider="System.Data.SqlClient" ...
有什麼方法來指定的app.config或在運行時供應商?
我希望能夠通過配置更改將數據提供程序切換到SQL Server和SQL Server Compact Edition或從SQL Server Compact Edition切換數據提供程序。但它不以EDMX文件,我想我可以看到,爲什麼工作和尋找:在配置中更改實體框架提供程序
<edmx:StorageModels>
<Schema ... Provider="System.Data.SqlClient" ...
有什麼方法來指定的app.config或在運行時供應商?
Storage-Model綁定到特定的提供者,這將導致實體框架拒絕任何與指定提供者不兼容的DbConnection實現。
如果您查看實體框架連接字符串,可以看到StorageSchema,ModelSchema和Mapping在三個不同的文件(它們是從.edmx生成並嵌入程序集中)中指定的。您可以將.edmx分開,並自己嵌入.ssdl,.csdl和.msl,併爲SQL Server CE創建另一個.ssdl。這基本上只是複製&粘貼並替換提供者和一些列類型。
單元測試我改變架構這種方式(主要改變代碼執行前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="Data Source=|DataDirectory|\Database1.sdf"" providerName="System.Data.EntityClient" />
</connectionStrings>
它的工作原理)