SubSonic使用DbProviderFactory模式。 DbProviderFactory方法允許在不知道具體類型的情況下創建Connections/Commands/...。
// without factory
var con = new MySqlConnection();
var cmd = new MySqlCommand();
// with factory
var factory = DbProviderFactories.GetFactory("MySql.Data.MySqlClient");
var con = factory.CreateConnection();
var cmd = factory.CreateCommand();
這是一種更通用的方法。
但是,爲了這個工作,你必須安裝MySql.Data(msi-Package),它在machine.config
文件中創建了一些條目。
這就是說,
我也喜歡我的編譯環境,不依賴於安裝的軟件,這使得它更容易切換到新機,而無需安裝多個依賴。
但是這需要一點點的工作:
修改你的app.config/web.config文件,並把這個地方<configuration>
和</configuration>
<system.data>
<DbProviderFactories>
<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=6.4.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
之間
我只是複製和粘貼
片斷
%windir%\Microsoft.NET\Framework\<version>\Config
安裝MSI後。
如果您的解決方案有多個項目,您必須爲主項目(亞音速可以在運行時找到您的提供程序)和您的DAL項目(亞音速可以在代碼生成過程中找到您的提供程序)執行此操作。
如果您使用其他MySQL版本,則可以更改該版本。
你必須做的第二件事是告訴模板在哪裏可以找到MySql.Data.dll(如果它不在GAC中)。
您可以通過編輯MySQL.ttinclude
文件做到這一點(看assembly
指令)
<#@ include file="Settings.ttinclude" #>
<#@ assembly name="$(SolutionDir)\Dependencies\MySql.Data.dll" #>
<#@ import namespace="MySql.Data.MySqlClient" #>
<#+
這些變化我的解決方案運行查找和模板生成也適用找到一個乾淨的安裝沒有安裝任何MySql的組件。