亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在同一項目中使用具有多個數據庫和提供程序的實體框架(SQL Server 和 MySql)

在同一項目中使用具有多個數據庫和提供程序的實體框架(SQL Server 和 MySql)

C#
浮云間 2023-09-16 15:57:56
背景:我有一個應用程序(Web 表單和控制臺),可以首先使用實體框架代碼輕松訪問多個 SQL Server 數據庫,沒有任何問題。我可以在上下文之間來回切換,沒有錯誤?,F在我嘗試添加一個新的 MySql 數據庫(不同的提供商),但是如果我從一個上下文切換到另一個上下文,我會收到以下錯誤消息:錯誤:在發現“MySqlEFConfiguration”類型之前,實體框架使用默認的 DbConfiguration 實例。在使用任何實體框架功能之前,必須在應用程序啟動時設置“MySqlEFConfiguration”實例,或者必須在應用程序的配置文件中注冊。有關詳細信息,請參閱 http://go.microsoft.com/fwlink/?LinkId=260883 。我見過建議將“codeConfigurationType”屬性添加到 web.config 中的entityFramework 節點以指定我的 MySql 程序集的解決方案,但這不起作用,因為我的目標是具有多個提供程序的多個數據庫。Microsoft 支持文章似乎暗示要創建我自己的自定義 DbConfiguration 文件,但我已經有了一個:MySql.Data.Entity.mySqlEFConfiguration,并且我已經用它相應地裝飾了我的 DbContext: [DbConfigurationType(typeof(MySqlEFConfiguration))]     public class MySqlDBContext : DbContext     {         public MySqlDBContext() : base("MySqlDBContext")         {         }     } ...問題:似乎沒有任何方法可以使用配置文件配置來執行此操作,因為我僅限于單個條目。那么切換上下文時如何指定提供者呢?我想每個 DbContext 的構造函數中都缺少一些東西來明確說明要使用哪個提供程序?根據記錄,我在控制臺應用程序和 Web 表單應用程序中收到相同的錯誤消息。更新:附加信息(8/21/19) 如果我在 SQLServer 數據源上禁用 MultipleActiveResultSets (MARS),似乎可以正常工作,但這不是一個理想的解決方案,因為我已經編寫了代碼來利用 MARS。(8/22/19) 實際上這并不能解決問題。它只會繼續下一個問題。每個應用程序只能有一個 DbConfiguration,因此解決方案可能涉及編寫一個與兩個提供商一起使用的 DbConfiguration...我已通過我的 MSDN 訂閱提交了支持請求,看看他們是否有任何其他見解...
查看完整描述

3 回答

?
慕容森

TA貢獻1853條經驗 獲得超18個贊

在微軟的幫助下,我終于弄清楚了。希望這對其他人有幫助。我必須創建自己的類繼承自 DbConfiguration


public class MyCustomSQLDbConfiguration : DbConfiguration

{

    public MyCustomSQLDbConfiguration()

    {

        SetExecutionStrategy("MySql.Data.MySqlClient", () => new MySqlExecutionStrategy());

        SetDefaultConnectionFactory(new LocalDbConnectionFactory("mssqllocaldb"));

    }

}

然后相應地裝飾我的 MySqlDBContext:


[DbConfigurationType(typeof(MyCustomSQLDbConfiguration))]

public class MySqlDBContext : DbContext

{

    public MySqlDBContext() : base("MySqlDBContext")

    {


    }

 }

最后(也是重要的),在運行應用程序時顯式設置它。對于控制臺應用程序,在 Program.Main 的開頭,或者在 Web 應用程序中,在 Application_Start 上:


DbConfiguration.SetConfiguration(new MyCustomSQLDbConfiguration());


查看完整回答
反對 回復 2023-09-16
?
MMMHUHU

TA貢獻1834條經驗 獲得超8個贊

自定義 DbConfiguration 也對我有用?;蛘撸铱吹剿褂?DbContext 和 DbConnection 構造函數成功運行,而不使用任何 DbConfiguration 屬性。


using (var sqlConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["MssqlConnectionString"].ConnectionString))

using (var mssqlDbContext = new MSSQLDbContext(sqlConnection, true))

{

   //...

}


using (var mySqlConnection = new MySqlConnection(ConfigurationManager.ConnectionStrings["MysqlConnectionString"].ConnectionString))

using (var mySQLDbContext = new MySQLDbContext(mySqlConnection, true))

{

   //...

}

配置中的system.data部分如下。


  <system.data>

    <DbProviderFactories>

      <remove invariant="System.Data.SqlServerCe.4.0" />

      <add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />

      <remove invariant="MySql.Data.MySqlClient" />

      <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL"

           type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=8.0.24.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />

    </DbProviderFactories>

  </system.data>

我可以看到從兩個數據上下文(MSSQL Compact 和 MySQL)檢索的結果。


查看完整回答
反對 回復 2023-09-16
?
青春有我

TA貢獻1784條經驗 獲得超8個贊

您可以使用部分類:


 public partial class MySqlDBContext : DbContext

    {

        public MySqlDBContext(string FirstSQLServerDBContext)

            : base(configmanager.connectionstrings(FirstSQLServerDBContext)...)

        {

        }


查看完整回答
反對 回復 2023-09-16
  • 3 回答
  • 0 關注
  • 194 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號