2012-03-26 61 views
1

我試圖將實體框架與適配器結構配合使用,我的目標是讓單個.edmx結構能夠管理多個連接。具有實體框架的適配器(C#)

我需要有這些適配器:

  • 基於文件的數據庫(SqlServerCE 3.5)
  • 的MySQL(從甲骨文其定製提供商)
  • 甲骨文(如MySQL的)
  • 的SqlServer

我有一個DAO類,它接收來自winform的數據連接的bean(依賴注入對象),而不是由於sp在該bean中的ecific信息中,DAO將通過數據庫工廠類加載正確的適配器。

我的數據庫工廠將加載一個真正的適配器類(例如,用於實現我的抽象適配器類的mysql A_Mysql.cs)。

我特別想明白跳,我可以在適配器修改連接方法:

public override Entities createConnection(DbConnection dbBean) 
    { 
     string conn = 
      @"metadata=res://*/Toolkit.Database.External.ADO.ADODatabase.csdl" + 
      @"|res://*/Toolkit.Database.External.ADO.ADODatabase.ssdl" + 
      @"|res://*/Toolkit.Database.External.ADO.ADODatabase.msl;" + 
      @"provider=MySql.Data.MySqlClient;" + 
      "provider connection string=\"Persist Security Info=True;server=" + dbBean.Server + ";" + 
      "Port=" + dbBean.Port + ";" + 
      "User Id=" + dbBean.Username + ";"+ 
      "Password=" + dbBean.Password + ";" + 
      "database=" + dbBean.Schema + "\""; 

     Entities entities = new Entities(conn); 

     return entities; 
    } 

使用相同的.edmx,在我的DAO ...

我敢肯定,這是正確的方式,不幸的是,這個系統總是返回我從SqlCE的錯誤(我已經生成了SqlServerCE的第一個.emdx,但它不包含任何有關該數據庫的信息,我的App.config文件沒有存儲數據庫信息)...

你能幫助我嗎?如有需要,請寫信給我以獲取更多信息。 謝謝。

回答

0

您的數據訪問層將需要在實體提供者級別抽象,而不是數據庫連接級別。你基本上是在談論使用存儲庫模式。您需要針對您計劃支持的每個提供程序擁有單獨的上下文,因爲這最終負責將您的Linq查詢轉換爲特定數據庫平臺的正確SQL語法。每個上下文應該實現相同的接口(這是您的存儲庫接口)。在你的代碼中,你所做的一切都是針對該接口,而不是實際的上下文類型。然後使用依賴注入框架(例如Ninject)來管理爲您正在使用的數據庫提供程序實例化正確的上下文實現。

+0

你能幫我嗎?我仍然有一些困難:[這裏](http://stackoverflow.com/questions/9903988/modify-ssdl-runtime-for-ado-net-and-entity-framework) – Gian 2012-03-28 13:57:38

0

我有關於如何使用多個數據庫[它在西班牙語:)]

Post

問候多個連接上MI網站一個帖子。

0

它不起作用,因爲EDMX本身包含有關數據庫提供者的信息。存儲在EDMX中的整個數據庫描述也針對單個數據庫提供者。 SQL Server 2005和2008之間甚至有所不同。對於您想要支持的每個數據庫,至少需要單獨的SSDL部分。

+0

你能幫我嗎?我仍然有一些困難:[這裏](http://stackoverflow.com/questions/9903988/modify-ssdl-runtime-for-ado-net-and-entity-framework) – Gian 2012-03-28 13:57:13