LLBLGenProv3が必要です。V2はsqlserverにdbproviderfactoryを使用しますが、生成されたコードには、まだSqlClientクラスへのハードコードされたキャストがいくつかあります。v3はそうではありません。私はあなたがv2を使うと思いますか?
さらに、プロファイラーのProfiledDbProviderFactory.csに小さな変更を加える必要があります。
/// <summary>
/// Extension mechanism for additional services;
/// </summary>
/// <returns>requested service provider or null.</returns>
object IServiceProvider.GetService(Type serviceType)
{
if(serviceType == typeof(ProfiledDbProviderFactory))
{
// For LLBLGen Pro v3 and up.
return tail;
}
IServiceProvider tailProvider = tail as IServiceProvider;
if (tailProvider == null) return null;
var svc = tailProvider.GetService(serviceType);
if (svc == null) return null;
#if ENTITY_FRAMEWORK
if (serviceType == typeof(DbProviderServices))
{
svc = new ProfiledDbProviderServices((DbProviderServices)svc, profiler);
}
#endif
return svc;
}
編集します。フレームワークはADO.NETから取得したDbProviderFactoryを使用しているため、これが機能するかどうかはわかりません。そのファクトリは、ProfiledDbProviderFactoryではなく、実際のSqlclientのファクトリです。ここでプロファイル接続を作成できますが、それは機能しません。ファクトリは接続から取得されず、接続はADO.NET(DbProviderFactories.GetFactory())から取得されたファクトリから作成され、他のすべての要素が作成されます。その工場でも。
mvcプロファイラーは、実際のファクトリタイプをラップするラッパーを使用して、リフレクションを介してDbProviderFactoriesのデータテーブルを上書きする必要があります。これはちょっと厄介ですが、本で物事を行うデータアクセスコードで物事を機能させる唯一の方法は、ファクトリを取得し、ファクトリを介して要素を作成することです。
驚いたことに、Linq to sqlとEntityFrameworkは、接続オブジェクトから取得したファクトリで動作するようです。そもそも、どのようにしてその接続オブジェクトを作成したのでしょうか。