实体框架4.3不创建数据库

时间:2012-02-20 16:37:11

标签: c# .net 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;}
}

更新1

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

更新2

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

2 个答案:

答案 0 :(得分:3)

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

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

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

Update-Database -Verbose

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

//MiniProfilerEF.Initialize();

在MiniProfiler App_Start中。


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

Enable-Migrations -Force

答案 1 :(得分:2)

...只是为所有面临类似问题的人添加一个可能的答案 (注意:这是一个开放式的故事似乎,因为迁移部分显然还有一些错误)... 这个链接最接近我所需要的 Error when running Update-Database with EF 4.3 所以,你需要做3件事(按顺序 - 我指的是现有项目):
(全部在PM控制台中)

  • 确保PM控制台中的“默认项目”设置为您想要的项目(例如,对于更大的解决方案) - 这不一定与您的启动项目相匹配! (并仔细观察PM中关于是否对您想要的项目采取行动的意见/回应)
  • (1)Enable-Migrations -force
  • (2)Add-Migration Initial
  • (3)Update-Database -Verbose

...如果您在PM控制台中仍然出现异常

  • (4)那么您可能需要将项目“移动”到根目录

这听起来很傻我知道,但这是我身上的主要问题 - 我有一堆解决方案文件夹,上面的任何一个都会在解决方案文件夹中的项目上失败。但是,一旦我将项目移动到根目录,一切都运行正常(没有更多例外情况,有或没有CLR开启或关闭的第一次机会异常)...
希望这有助于某人

编辑:如果您的数据模型项目(EF CF)是一个库 - 然后将该项目设置为PM控制台中的“默认项目” - 并直接在该项目上运行上述所有内容(并在lib本身中创建了迁移配置等。否则它会失败(并且当你的模型是一个lib时,同样没有出现MigrationHistory异常 - 并且没有为它定义迁移,并且你在'主项目'上定义了迁移)。

编辑:您需要将lib(EF模型)和'startup'项目(调用它)移动到根目录中。