相关疑难解决方法(0)

无法将"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();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

DataContext构造函数:

    public ProjectDataContext(string nameOrConnectionString)
        : base(nameOrConnectionString) {
        Active = new Active(this);
    }
Run Code Online (Sandbox Code Playgroud)

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

**更新

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

c# sql entity-framework mvc-mini-profiler

7
推荐指数
1
解决办法
2272
查看次数

使用MiniProfiler和EF 5以及Autofac分析DbContext的正确方法

MiniProfiler网站给出了生成实体框架下面的代码ObjectContext:

public static MyModel Get()
{
  var conn =  new StackExchange.Profiling.Data.EFProfiledDbConnection(GetConnection(), MiniProfiler.Current);
  return ObjectContextUtils.CreateObjectContext<MyModel>(conn); // resides in the MiniProfiler.EF nuget pack
}
Run Code Online (Sandbox Code Playgroud)

但是,使用Entity Framework 5,我没有使用ObjectContext- 而是我使用的是DbContext.我不能在这里插入模型名称,因为该CreateObjectContext<T>()方法需要T是类型ObjectContext.(出于同样的原因,此答案中给出的代码也不起作用).

另外,我使用autofac来初始化我的Db连接.这是使用以下内容注册的(MyData=我的EF DataContext的名称):

Builder.RegisterType<MyData>().As<DbContext>().InstancePerHttpRequest();
Run Code Online (Sandbox Code Playgroud)

因此结合两部分:如何使用autofac初始化与MiniProfiler.EF绑定的DbContext?如果这是不可能的,至少我怎么做第一部分(为MiniProfiler.EF创建一个工厂方法来返回DbContext)?

autofac dbcontext mvc-mini-profiler entity-framework-5

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