实体框架4.3不创建数据库

Mar*_*cin 6 .net c# entity-framework

我创建了新项目并添加了最新的实体框架(版本4.3).我像以前的EF版本一样创建了类和上下文.但是,在第一次运行时应该创建数据库(在我的情况下是SQL Server 2005),我收到以下错误:

执行命令定义时发生错误.有关详细信息,请参阅内部异常

具有以下内部异常:

无效的对象名称'dbo .__ MigrationHistory'.

据我了解,此表适用于迁移,但如果没有数据库,则此表不存在.难道我做错了什么?

更多信息:出于测试目的,我只创建了一个类:

public class Test
{ 
  [Key]
  public int TestId { get; set;}

  public string Name {get; set;}
}

public class Context : DbContext
{
   public Context() : base("MyConnection")
   {
   }

   public DbSet<Test> Tests { get; set;}
}
Run Code Online (Sandbox Code Playgroud)

更新1

经过一些测试后,我意识到应用程序正在从视觉工作室抛出未处理的异常并在视觉工作室中中断.System.Data.EntityCommandExecutionException是一个例外.一旦我忽略了这个期望并且没有停止代码执行,就创建了数据库.

更新2

在使用数据库几个小时之后,我发现使用Enable-Migrations选项和来自控制台的Update-Database也正在解决这个问题.它在应用程序启动之前创建数据库,并且不会在Visual Studio中中断.

Chr*_*ter 4

您可以尝试删除构造函数以使 EF 使用它的默认连接字符串吗?

public Context() : base("MyConnection")
{
}
Run Code Online (Sandbox Code Playgroud)

如果失败,您可以尝试从包管理器控制台更新数据库,看看是否获得任何进一步的信息。

Update-Database -Verbose
Run Code Online (Sandbox Code Playgroud)

可能与您的情况无关,但在使用 MvcMiniProfiler 1.9 时出现相同的错误。如果您也在使用它,请通过注释掉以下行来确保关闭 EF 分析:

//MiniProfilerEF.Initialize();
Run Code Online (Sandbox Code Playgroud)

在 MiniProfiler App_Start 内。


对于遇到类似问题的其他人,我发现从包管理器控制台重新启用迁移在某些情况下会有所帮助。 在执行此操作之前,请确保您拥有迁移配置的副本。

Enable-Migrations -Force
Run Code Online (Sandbox Code Playgroud)