我创建了新项目并向其添加了最新的实体框架(版本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中中断。
答案 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控制台中)
Enable-Migrations -force
Add-Migration Initial
Update-Database -Verbose
...如果您在PM控制台中仍然出现异常
这听起来很傻我知道,但这是我身上的主要问题 - 我有一堆解决方案文件夹,上面的任何一个都会在解决方案文件夹中的项目上失败。但是,一旦我将项目移动到根目录,一切都运行正常(没有更多例外情况,有或没有CLR开启或关闭的第一次机会异常)...
希望这有助于某人
编辑:如果您的数据模型项目(EF CF)是一个库 - 然后将该项目设置为PM控制台中的“默认项目” - 并直接在该项目上运行上述所有内容(并在lib本身中创建了迁移配置等。否则它会失败(并且当你的模型是一个lib时,同样没有出现MigrationHistory异常 - 并且没有为它定义迁移,并且你在'主项目'上定义了迁移)。
编辑:您需要将lib(EF模型)和'startup'项目(调用它)移动到根目录中。