c# – 无法将“MvcMiniProfiler.Data.EFProfiledDbConnection”类型的对象强制转换为“System.Data.SqlClient.SqlConnection”类型

无法将类型为“MvcMiniProfiler.Data.EFProfiledDbConnection”的对象强制转换为“System.Data.SqlClient.SqlConnection”.

我正在尝试升级到MvcMiniProfiler 1.9.0,当我调用MiniProfilerEF.Initialize()时我会继续这样做.我已经删除了system.data配置部分.我不知道我做错了什么.我已经按照网站上的步骤进行了操作,但也许我错过了什么?

我首先使用EF代码4.1并且我将我的connectionstring的名称传递给构造函数以创建我的datacontext.

Web Activator

using Project.Web.App_Start;
using WebActivator;

[assembly: PreApplicationStartMethod(typeof(MiniProfiler),"Start")]

namespace Project.Web.App_Start {
    public class MiniProfiler {
        public static void Start()
        { 
            if (Eco.Environment.IsDevelopment) {
                MiniProfilerEF.Initialize();
            }
        }
    }
}

StructureMap注册表:

using Project.Domain.Repositories;
using StructureMap.Configuration.DSL;

namespace Project.Web.DependencyResolution.Registries {
public class RepositoriesRegistry : Registry {
    public RepositoriesRegistry() {
        For<IProjectDataContext>().HybridHttpOrThreadLocalScoped().Use(() => new ProjectDataContext(Eco.Database.Name));
          }
    }
}

DataContext构造函数:

public ProjectDataContext(string nameOrConnectionString)
        : base(nameOrConnectionString) {
        Active = new Active(this);
    }

我从配置中删除了system.data dataproviders,因为文档说我只需要调用MiniProfilerEF.Initialize().

**更新

以前在1.7 MvcMiniProfiler中我必须设置Database.DefaultConnectionFactory属性,但我删除了它. Database.DefaultConnectionFactory总是以SqlConnectionFactory的形式返回,不应该是ProfiledConnectionFactory或类似的东西吗?

解决方法

我看到同样的错误.它让我疯了但我终于明白了.我的问题与web.config,程序集,Initialize_42或Initialize(false)hacks或任何东西无关.

这是我出错的地方……

我启用了自动应用迁移,如下所示:

App_Start:

Database.SetInitializer(
    new MigrateDatabaseToLatestVersion<DataContext,Migrations.Configuration>()
);

迁移/ Configuration.cs:

internal sealed class Configuration 
    : DbMigrationsConfiguration<Path.To.DataContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = true;
    }
}

这是通过WebActivator触发的,如下所示:

[assembly: WebActivator.PreApplicationStartMethod(
    typeof(service_tracker_mvc.App_Start.DatabaseInitializer),"Start")]

我意外地发现禁用此过程会导致分析器工作.事实上,问题是这个初始化过程发生得太快了.它通常发生在Application_Start期间(如果你没有使用这个花哨的WebActivator东西)所以我把它改成了PostStart.现在它有效:

▼▼▼▼
[assembly: WebActivator.PostApplicationStartMethod(
    typeof(service_tracker_mvc.App_Start.DatabaseInitializer),"Start")]

相关文章

ASP.NET 提供一个功能完整的缓存引擎,页面可使用该引擎通过...
问题描述 Xamarin使用IsGroupingEnabled=&quot;true&...
一、设备类是Xamarin重要开发组成部分,下面介绍一下设备类的...
大家都知道,一个英文=1字节,一个汉字2字节,而一个emoji表...
概念:CORS是一个W3C标准,全称是&quot;跨域资源共享&am...
1.Xamarin调用WebView: 原理:Xamarin.Forms WebView内置方...