使用Entity Framework 5,MiniProfiler 2.为MiniProfiler.EF安装Nuget。
按如下方式创建连接
var conn = new EFProfiledDbConnection(DbConnections.GetSqlConnection(), MiniProfiler.Current);
return new MyDbContext(conn, true);
尝试使用DbContext检索数据时,会返回以下错误:
Unable to determine the provider name for connection of type
'StackExchange.Profiling.Data.EFProfiledDbConnection'.`
我尝试将以下内容添加到web.config:
<system.data>
<DbProviderFactories>
<remove invariant="StackExchange.Profiling.Data.ProfiledDbProviderFactory" />
<add name="StackExchange.Profiling.Data.ProfiledDbProviderFactory"
invariant="StackExchange.Profiling.Data.ProfiledDbProviderFactory"
description="StackExchange.Profiling.Data.ProfiledDbProviderFactory"
type="StackExchange.Profiling.Data.ProfiledDbProviderFactory, MiniProfiler, Version=2.0.2.0, Culture=neutral, PublicKeyToken=b44f9351044011a3" />
</DbProviderFactories>
</system.data>
这没有用。我也尝试过使用MiniProfiler.EntityFramework中的不同EFProviderFactories,但是无法使用它们中的任何一个。
如果我尝试在MiniProfilerEF.Initialize();
中运行App_Start
,那么在尝试访问数据库时出现以下错误:
如果在Code First模式下使用,使用T4模板为Database First和Model First开发生成的代码可能无法正常工作。要继续使用Database First或Model First,请确保在执行应用程序的配置文件中指定了Entity Framework连接字符串。要使用从Database First或Model First生成的这些类,使用Code First添加任何其他配置,使用属性或DbModelBuilder API,然后删除引发此异常的代码。
从web.config中删除DbProviderFactories
部分并在MiniProfilerEF.Initialize_EF42();
中运行App_Start
会导致原始错误。
由于MiniProfiler页面显示MiniProfilerEF.Initialize()
仅用于代码,所以无论如何这似乎都不是。
其他搜索没有给我任何其他的尝试,除了在Web.Config中添加部分。有关如何进行的任何建议?目标是能够使用由Mvc MiniProfiler分析的Model First DbContext。
答案 0 :(得分:8)
你的global.asax看起来像这样吗?
public class MvcApplication : HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
AuthConfig.RegisterAuth();
AutomapperConfig.RegisterMappings();
MiniProfiler.Settings.SqlFormatter = new StackExchange.Profiling.SqlFormatters.SqlServerFormatter();
MiniProfilerEF.Initialize();
}
protected void Application_BeginRequest()
{
if (Request.IsLocal)
{
MiniProfiler.Start();
}
}
protected void Application_EndRequest(object sender, EventArgs e)
{
MiniProfiler.Stop(false);
}
}
我以常规方式实例化我的上下文:
var _database = new DinoContext(_connectionString);