我正在尝试将MvcMiniProfiler集成到我的asp.net mvc + entity framewok项目中。第一次网络请求一切正常,但它在其他请求中给予例外。MvcMiniProfiler无法投射EFProfiledDbConnection类型的对象
我的项目是
MVC 3
实体框架4.1(DatabaseFirst + POCO发电机的DbContext)
MvcMiniProfiler.dll 1.9.0.0
MvcMiniProfiler.EntityFramework.dll 1.9.1.0
我从安装MvcMiniProfiler怒江获取
下面添加到Global.asax中
protected void Application_BeginRequest()
{
if (Request.IsLocal)
{
MvcMiniProfiler.MiniProfiler.Start();
MiniProfilerEF.Initialize();
}
}
添加下面的web.config
<system.data>
<DbProviderFactories>
<remove invariant="MvcMiniProfiler.Data.ProfiledDbProvider" />
<add name="MvcMiniProfiler.Data.ProfiledDbProvider" invariant="MvcMiniProfiler.Data.ProfiledDbProvider" description="MvcMiniProfiler.Data.ProfiledDbProvider" type="MvcMiniProfiler.Data.ProfiledDbProviderFactory, MvcMiniProfiler, Version=1.8.0.0, Culture=neutral, PublicKeyToken=b44f9351044011a3" />
</DbProviderFactories>
</system.data>
我得到这个例外
System.InvalidCastException was unhandled by user code
Message=Unable to cast object of type 'MvcMiniProfiler.Data.EFProfiledDbConnection' to type 'System.Data.SqlClient.SqlConnection'.
Source=System.Data
StackTrace:
at System.Data.SqlClient.SqlCommand.set_DbConnection(DbConnection value)
at System.Data.Common.DbCommand.set_Connection(DbConnection value)
at MvcMiniProfiler.Data.ProfiledDbCommand.set_DbConnection(DbConnection value) in C:\Users\sam\Desktop\mvc-mini-profiler\MvcMiniProfiler\Data\ProfiledDbCommand.cs:line 118
at System.Data.Common.DbCommand.set_Connection(DbConnection value)
at System.Data.Common.Utils.CommandHelper.SetStoreProviderCommandState(EntityCommand entityCommand, EntityTransaction entityTransaction, DbCommand storeProviderCommand)
at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)
at System.Data.Objects.Internal.ObjectQueryExecutionPlan.Execute[TResultType](ObjectContext context, ObjectParameterCollection parameterValues)
例外是EF发生调用
ModaEntitiesWrapper.GetInstance().Articles
.AsNoTracking()
.Where(p => p.StatusId == 1).ToList();
如果我Web.Config中从1.8改变MvcMiniProfiler.Data.ProfiledDbProvider版本.0.0到1.9.0.0 在MiniProfilerEF.Initialize()调用中发生新类型的异常。
System.IndexOutOfRangeException was unhandled by user code
Message=The given DataRow is not in the current DataRowCollection.
Source=System.Data
StackTrace:
at System.Data.DataRowCollection.Remove(DataRow row)
at MvcMiniProfiler.MiniProfilerEF.Initialize()
+1有用的答案 - 只是固定一个小错误的'Create'样品 – BrokenGlass 2012-02-21 22:01:03
在我想你的解决方案,但现在我得到另一个异常像下面 System.NotSupportedException:无法确定用于连接的提供者名称类型'MvcMiniProfiler.Data.EFProfiledDbConnection'。 System.Data.Entity.ModelConfiguration.Utilities.DbConnectionExtensions.GetProviderInvariantName(的DbConnection连接)613588 System.Data.Entity.ModelConfiguration.Utilities.DbConnectionExtensions.GetProviderInfo(的DbConnection连接,DbProviderManifest&providerManifest)57 System.Data.Entity的。 DbModelBuilder。Build(DbConnection providerConnection)+159 – Yucel 2012-02-22 20:04:43
Hey Yucel,您需要在您的项目中安装/引用Entity Framework,并且需要MvcMiniProfiler - 您还需要实体框架软件包。 EntityConnectionStringBuilder将使用EF特定的元数据解析实体框架连接字符串。 ProviderConnectionString是我们习惯使用的名称(name,connectionString + provider)。在ADO.NET内部,有一个注册提供程序的工厂,它根据连接字符串中的提供程序属性实例化正确的提供程序。例如,MSSQL连接通常使用SqlClient提供程序。 – Shelakel 2012-02-27 06:55:13