我正在尝试将mvc-mini-profiler集成到asp.net mvc应用程序中,并使用Llblgen进行数据访问。我已经尝试覆盖了llblgen的CommonDaoBase.CreateConnection:
public override DbConnection CreateConnection(string connectionString)
{
return MvcMiniProfiler.Data.ProfiledDbConnection.Get(base.CreateConnection(connectionString));
}但是这导致了异常,说“不能强制转换到SqlConnection...”。有没有人让mvc-mini-profiler和llblgen一起工作?
发布于 2011-07-30 20:05:52
Miha Markic刚刚在他的博客中发布了答案:http://blog.rthand.com/post/2011/07/24/Integrating-MvcMiniProfiler-and-LLBLGenPro.aspx
发布于 2011-06-16 18:05:48
你需要LLBLGen专业版v3。V2确实使用了sqlserver的dbproviderfactory,但是生成的代码仍然有一些硬编码的类型转换到SqlClient类。我猜你用的是v2,v3不是吗?
此外,还必须对分析器的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,这个工厂是真正的Sqlclient的工厂,而不是ProfiledDbProviderFactory。您可以在这里创建配置文件连接,但这是行不通的:工厂不是从连接获得的,连接是从从ADO.NET (DbProviderFactories.GetFactory())获得的工厂创建的,所有其他元素也是使用该工厂创建的。
mvc profiler必须通过封装实际工厂类型的包装器通过反射来覆盖DbProviderFactories中的数据表。这有点令人讨厌,但这是使用数据访问代码的唯一方法,数据访问代码按书上的方式工作:获取工厂,通过工厂创建元素。
令我惊讶的是,Linq to sql和Entity框架显然使用从connection对象获得的工厂:一开始是如何创建connection对象的?
https://stackoverflow.com/questions/6359570
复制相似问题