无法将类型为“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")]