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をインストールした後。
ソリューションに複数のプロジェクトがある場合は、メイン プロジェクト (実行時に subsonic がプロバイダーを見つけられるようにするため) と DAL プロジェクト (subsonic がコード生成中にプロバイダーを見つけることができるようにするため) に対してこれを行う必要があります。
別の MySQL バージョンを使用している場合は、それを変更できます。
次に行う必要があるのは、MySql.Data.dll の場所をテンプレートに伝えることです (GAC にない場合)。
MySQL.ttinclude
ファイルを編集することでこれを行うことができます(assembly
ディレクティブを見てください)
<#@ include file="Settings.ttinclude" #>
<#@ assembly name="$(SolutionDir)\Dependencies\MySql.Data.dll" #>
<#@ import namespace="MySql.Data.MySqlClient" #>
<#+
これらの変更により、私のソリューションは find を実行し、テンプレートの生成は、MySql コンポーネントがインストールされていないクリーン インストールでも機能します。