首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MvcMiniProfiler无法强制转换EFProfiledDbConnection类型的对象

MvcMiniProfiler无法强制转换EFProfiledDbConnection类型的对象
EN

Stack Overflow用户
提问于 2012-02-19 06:30:42
回答 2查看 3.9K关注 0票数 6

我正在尝试将MvcMiniProfiler集成到我的asp.net mvc+entity framewok项目中。第一次web请求一切正常,但在其他请求时却出现异常。

我的项目是

MVC 3

实体框架4.1 (DatabaseFirst + POCO生成器DbContext)

MvcMiniProfiler.dll 1.9.0.0

MvcMiniProfiler.EntityFramework.dll 1.9.1.0

我从Nu-Get安装MvcMiniProfiler

添加到下面的global.asax

代码语言:javascript
复制
    protected void Application_BeginRequest()
    {
        if (Request.IsLocal)
        {
            MvcMiniProfiler.MiniProfiler.Start();
            MiniProfilerEF.Initialize();       
        }
    }

添加到下面的web.config

代码语言:javascript
复制
   <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>

我得到了这个异常

代码语言:javascript
复制
    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调用中发生异常

代码语言:javascript
复制
ModaEntitiesWrapper.GetInstance().Articles
               .AsNoTracking()
               .Where(p => p.StatusId == 1).ToList();

如果我将Web.Config中MvcMiniProfiler.Data.ProfiledDbProvider版本从1.8.0.0更改为1.9.0.0,则在MiniProfilerEF.Initialize()调用中发生新类型的异常。

代码语言:javascript
复制
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() 
EN

回答 2

Stack Overflow用户

发布于 2012-05-30 17:59:38

也许这会有帮助。将MiniProfilerEF.Initialize();移到方法Application_Start()的顶部。请注意,在EF 4.1和更高版本中,调用的方法应该是MiniProfilerEF.Initialize_EF42();

代码语言:javascript
复制
protected void Application_Start() {
    Logger.Info("Application start");
    MiniProfilerEF.Initialize_EF42();
    // ...
}
票数 6
EN

Stack Overflow用户

发布于 2012-02-20 19:45:34

查看http://code.google.com/p/mvc-mini-profiler/

下面是一个如何将mvc-mini-profiler与EF数据库一起使用的示例:

代码语言:javascript
复制
public static class Entities
{
    public static MyEntities Create()
    {
         var builder = new EntityConnectionStringBuilder(ConfigurationManager.ConnectionStrings["MyEntities"].ConnectionString);
         var sqlConnection = new SqlConnection(builder.ProviderConnectionString);
         var profiledConnection = new EFProfiledDbConnection(sqlConnection, MiniProfiler.Current);

         return profiledConnection.CreateObjectContext<MyEntities>();
    }
}

然后,您可以使用该方法向IOC容器注册您的实体,或者使用类似于

代码语言:javascript
复制
using(var entities = Entities.Create())
{
    //Do stuff here
    entities.SaveChanges();
}

编辑:忘记添加

MiniProfilerEF.Initialize();

它只首先用于EF代码。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9344777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档