2011-12-23 80 views
3

我已經編寫了一個ASp.net C#.NET 4.0應用程序,並且使用了Ms SQL2008 DB。如何在ASp.net應用程序中使用實體框架中的MySQL和MSSQL

這是一個2層應用程序... BLL/DAL及UI

我用
- 表(具有多個索引,使獨特的記錄)
- 表之間relationals(1到M的關係)
- 實體框架的數據模型
- LINQ(更新/插入/選擇/刪除)

我沒有用過
- Storedprocedures
個 - 視圖
- TSQL
- 無需人工SQL操作
- 等

所以如果你看到它是非常簡單的設置。應用程序使用MsSQL2008 DB

所以我的問題是:我需要使用MySQL(客戶端的請求)。

我需要做什麼?由於我使用Entitiy Framework,我認爲這應該很容易完成嗎?

我該如何使應用程序可以使用MySQL /或可以同時支持(我的SQL/Mysql)。

請指教?

+1

您是否使用過EDMX或代碼優先映射? – 2011-12-23 08:28:13

+0

@LadislavMrnka:是的,我用過EDMX ..但是我創建了SQL DB2008表格,然後我從數據庫生成了圖表。 – ethem 2011-12-23 08:33:06

回答

3

EDMX文件由三個部分組成:

  • SSDL - 數據庫的描述。這部分包括有關使用的數據庫服務器
  • CSDL信息 - 你的類
  • MSL的描述 - SSDL和CSDL工件之間的映射的描述

如果你要使用多個數據庫服務器,你必須至少有獨立的每個數據庫的SSDL(如果要爲每個數據庫使用不同的表或列名稱,則還必須具有單獨的MSL)。

當你的庫被編譯時,這三個部分被提取到單獨的文件中,並作爲資源包含到編譯後的dll中。那是從EF連接字符串引用的那些奇怪的東西。您可以切換generation in EF designer,這些文件將被部署到您的bin目錄中。

支持多數據庫服務器的問題是您需要多個SSDL文件。 VS和EF設計器允許您只在EDMX內使用SSDL,每個EDMX只能有一個SSDL。所以,你的支持多個數據塊的選項有:

  • 單獨爲每個服務器EDMX。這會造成很大的問題,因爲您必須同步它們,並且必須確保CSDL部分完全相同。
  • 您的項目中有一個CSDL,一個MSL,兩個SSDL。這又是一個問題,因爲它意味着只有一個主EDMX和單獨的SSDL(它是XML文件),您將在其中再次維護所有數據庫描述。
  • 只有一個用於MSSQL服務器的EDMX,其中工件被部署到bin目錄+單獨的後處理,它將自動獲取SSDL併爲MySQL創建第二個。這是我最好的選擇。您需要檢測MySQL和MSSQL之間使用類型的差異(您可以使用@ChristiaanV描述的技巧來查找這些差異,但要確保備份您的EDMX,因爲您必須恢復它)並編寫自定義控制檯應用程序,腳本或XSLT將MsSQL的SSDL轉換爲MySQL的SSDL的轉換。您將以一個CSDL,一個MSL和兩個SSDL結束,其中第二個是從第一個自動生成的。

爲了使它在運行時工作,你需要MySQL的提供者 - 例如@Christaan​​V提到的連接器,並且你必須在MSSQL和MySQL的連接字符串中引用正確的SSDL。

Btw。下一次在開發應用程序之前瞭解哪個DB客戶需要。平臺客戶不支持開發應用程序的實際分析/要求失敗。

1

您可以安裝Mysql .Net connector並在EDMX文件,你可以選擇DDL生成模板= SSDLToMySQL.tt(VS)

它會比基於MySQL中的SQL代碼。

+0

但是它必須從EDMX的副本完成,因爲EDMX只能針對一種數據庫服務器類型。有關使用過的數據庫服務器的信息是EDMX的一部分。 – 2011-12-23 08:48:48

+0

@both:如果出現問題,我可以跳過Mssql部分。然後我可以保留2個獨立的項目..只需要現在運行MySql。我剛剛安裝了mysql工作臺...還有什麼? – ethem 2011-12-23 08:53:59

+0

您需要安裝Mysql .Net連接器。比在您的項目中使用EDMX文件引用mysql.data和mysql.data.entity dll。 – ChristiaanV 2011-12-23 09:03:17

相關問題