c# - 在不创建数据库的情况下将 Mini-Profilier 与 EF 4.3 和 MVC 4 结合使用

标签 c# asp.net-mvc entity-framework mvc-mini-profiler

我遇到了一个问题,即我们针对现有数据库使用 EF 4.3 Code First。我想将 Mini-Profiler 与 EF 一起使用并调用

MvcMiniProfiler.MiniProfilerEF.Initialize();

但是,由于我们实际上并未创建任何表,因此 dbo.__MigrationHistory 和 dbo.EdmMetadata 表不存在。探查器最终崩溃,因为它们不存在。有没有办法让分析器忽略这些 EF Code First 特定表?谢谢!

编辑:

这些是我得到的异常:(它们是分开的)

Invalid object name 'dbo.__MigrationHistory'.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
   at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
   at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
   at System.Data.SqlClient.SqlDataReader.get_MetaData()
   at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
   at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
   at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
   at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)
   at MvcMiniProfiler.Data.ProfiledDbCommand.ExecuteDbDataReader(CommandBehavior behavior) in \mvc-mini-profiler\MvcMiniProfiler\Data\ProfiledDbCommand.cs:line 155
   at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)
   at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)



Invalid object name 'dbo.EdmMetadata'.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
   at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
   at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
   at System.Data.SqlClient.SqlDataReader.get_MetaData()
   at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
   at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
   at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
   at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)
   at MvcMiniProfiler.Data.ProfiledDbCommand.ExecuteDbDataReader(CommandBehavior behavior) in \mvc-mini-profiler\MvcMiniProfiler\Data\ProfiledDbCommand.cs:line 155
   at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)
   at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)

最佳答案

我启动了一个新的 MVC 4 项目并安装/更新了以下 NuGet 包:

  • Entity Framework
  • 迷你探查器
  • MiniProfiler.EF

我在数据库上下文中关闭了 Code First 中的数据库初始化策略。

public class EmployeeContext : DbContext
{
    static EmployeeContext()
    {
        Database.SetInitializer<EmployeeContext>( null ); // must be turned off before mini profiler runs
    }

    public IDbSet<Employee> Employees { get; set; } 
}

迷你分析器工作正常。我手工创建了一个表数据库。

在静态构造函数中关闭数据库初始值设定项很重要。如果您在其他地方执行此操作,则迷你分析器代码可能会在您的代码之前运行,因此根本不应该对 __MigrationHistory 表进行查询。

关于c# - 在不创建数据库的情况下将 Mini-Profilier 与 EF 4.3 和 MVC 4 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9539946/

相关文章:

c# - VB.NET 等同于 C# 属性简写?

c# - visual studio xamarin 表单 mvvm

mysql - 属性为 null 导致 NullReferenceException 但 Entity Framework 数据库中的主键和外键是正确的并且彼此完全匹配

entity-framework - EF : Proper one-to-zero/one relationship

C# - 多维 int 数组

c# - 如何使用 OpenXML 查找数据透视表的数据源

javascript - 将 Session 值从我的 MVC 应用程序获取到我的 Javascript 中

javascript - 如何使用 jsGrid 将项目获取到字段中的下拉列表?

c# - Entity Framework - 表达式与函数

c# - .net Core EF - 按字符串名称或类型动态添加到 DbSet