entity framework4.3不创建数据库

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

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

具有以下内部exception:

无效的对象名称’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 Tests { get; set;} } 

更新1

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

更新2

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

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

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

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

 Update-Database -Verbose 

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

 //MiniProfilerEF.Initialize(); 

在MiniProfiler App_Start中。


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

 Enable-Migrations -Force 

……只是为所有面临类似问题的人添加一个可能的答案
(注意:这是一个开放式的故事似乎,因为迁移部分显然还有一些错误)…这个链接最接近我需要的
使用EF 4.3运行Update-Database时出错,因此,您需要执行3项操作(按此顺序 – 我指的是现有项目):
(都在PM控制台)

  • 确保PM控制台中的“默认项目”设置为您想要的项目(即对于更大的解决方案) – 这不一定与您的启动项目相匹配! (并仔细观察PM中关于是否对您想要的项目进行了操作的评论/回复)
  • (1) Enable-Migrations -force
  • (2) Add-Migration Initial
  • (3) Update-Database -Verbose

…如果你仍然在PM控制台中遇到exception

  • (4) 然后你可能需要将你的项目“移动”到根目录中

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

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

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