相关疑难解决方法(0)

MvcMiniProfiler无法转换EFProfiledDbConnection类型的对象

我正在尝试将MvcMiniProfiler集成到我的asp.net mvc +实体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

    protected void Application_BeginRequest()
    {
        if (Request.IsLocal)
        {
            MvcMiniProfiler.MiniProfiler.Start();
            MiniProfilerEF.Initialize();       
        }
    }
Run Code Online (Sandbox Code Playgroud)

下面添加到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>
Run Code Online (Sandbox Code Playgroud)

我得到了这个例外

    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 …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework mvc-mini-profiler

6
推荐指数
2
解决办法
3650
查看次数

无法使用Enity Framework 4.0设置MiniProfiler(不是代码优先)

我通过nuget在我的项目中安装了MiniProfiler和MiniProfiler.EF.

在使用MiniProfiler之前,我会在我的模型库中使用它来打开一个连接:

    public class NotificationRepository
    {
       private CBNotificationModel.CB_NotificationEntities db;

       public NotificationRepository()
       {
          db = new CB_NotificationEntities();
       }

       public NotificationContact GetNotificationContacts()
       {
          return db.NotificationContacts.ToList();
       }
    }
Run Code Online (Sandbox Code Playgroud)

要使用我创建的迷你探查器:

  public static class ConnectionHelper
    {
        public static CB_NotificationEntities GetEntityConnection()
        {
            var conn = new StackExchange.Profiling.Data.EFProfiledDbConnection(GetConnection(), MiniProfiler.Current);

            return ObjectContextUtils.CreateObjectContext<CB_NotificationEntities>(conn); // resides in the MiniProfiler.EF nuget pack
        }

        public static EntityConnection GetConnection()
        {
            return new EntityConnection(ConfigurationManager.ConnectionStrings["CB_NotificationEntities"].ConnectionString);
        }
    }
Run Code Online (Sandbox Code Playgroud)

模型库现在使用

db = ConnectionHelper.GetEntityConnection();
Run Code Online (Sandbox Code Playgroud)

但是这会给出错误:

mscorlib.dll中发生了未处理的"System.StackOverflowException"类型异常

我错过了一步吗?我尝试在Application_start()中添加MiniProfilerEF.Initialize()和MiniProfilerEF.Initialize_EF42(),但这只会更改给定的错误.

设置实体框架项目以使用miniprofiler似乎没有太多信息,除非它是代码优先的.

entity-framework asp.net-mvc-3 mvc-mini-profiler

4
推荐指数
1
解决办法
584
查看次数