簡體   English   中英

在配置中更改實體框架提供程序

[英]Change Entity Framework provider in configuration

我希望能夠通過配置更改將數據提供程序切換到SQL Server和SQL Server Compact Edition。 但它不起作用,看着EDMX文件,我想我可以看到原因:

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

有沒有辦法在app.config或運行時指定提供程序?

存儲模型與特定提供程序綁定,這將導致實體框架拒絕任何與指定提供程序不兼容的DbConnection實現。

如果查看Entity Framework連接字符串,可以看到StorageSchema,ModelSchema和Mapping在三個不同的文件中指定(這些文件是從.edmx生成的,而不是嵌入在程序集中)。 您可以將.edmx分開並自己嵌入.ssdl,.csdl和.msl,然后為SQL Server CE創建另一個.ssdl。 這基本上只是復制和粘貼並替換提供程序和一些列類型。

我在這里寫到: 比較實體框架

對於單元測試,我以這種方式更改Schema(在主代碼執行之前更改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>

有用)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM