C# 实体框架4.3没有';不要创建数据库
我创建了一个新项目,并向其中添加了最新的实体框架(版本4.3)。我像以前的EF版本一样创建了类和上下文。但是,在应创建数据库的第一次运行期间(在我的示例中是SQL Server 2005),我收到以下错误: 执行命令定义时出错。有关详细信息,请参见内部异常 除了以下内部异常: 对象名称“dbo.\u MigrationHistory”无效 据我所知,此表用于迁移,但如果没有数据库,则此表不存在。我做错什么了吗 更多信息: 出于测试目的,我只创建了一个类:C# 实体框架4.3没有';不要创建数据库,c#,.net,entity-framework,C#,.net,Entity Framework,我创建了一个新项目,并向其中添加了最新的实体框架(版本4.3)。我像以前的EF版本一样创建了类和上下文。但是,在应创建数据库的第一次运行期间(在我的示例中是SQL Server 2005),我收到以下错误: 执行命令定义时出错。有关详细信息,请参见内部异常 除了以下内部异常: 对象名称“dbo.\u MigrationHistory”无效 据我所知,此表用于迁移,但如果没有数据库,则此表不存在。我做错什么了吗 更多信息: 出于测试目的,我只创建了一个类: public class Test {
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;}
}
公共类测试
{
[关键]
公共int TestId{get;set;}
公共字符串名称{get;set;}
}
公共类上下文:DbContext
{
公共上下文():基(“MyConnection”)
{
}
公共数据库集测试{get;set;}
}
更新1
经过一些测试,我意识到应用程序正在从VisualStudio抛出未处理的异常,并在VisualStudio中中断。异常为System.Data.EntityCommandExecutionException。一旦我忽略了这个期望,并没有停止代码执行,数据库就被创建了
更新2
在另外几个小时使用数据库之后,我发现使用EnableMigrations选项和从控制台更新数据库也可以解决这个问题。它在应用程序启动之前创建数据库,不要在Visual Studio中中断。能否尝试删除构造函数以使EF使用它的默认连接字符串
public Context() : base("MyConnection")
{
}
如果做不到这一点,您可以尝试从PackageManager控制台更新您的数据库,以查看是否获得任何进一步的信息
Update-Database -Verbose
可能与您的情况无关,但在使用MvcMiniProfiler 1.9时,我会遇到相同的错误。如果您也在使用它,请通过注释掉以下行来确保关闭EF评测:
//MiniProfilerEF.Initialize();
在MiniProfiler应用程序中启动
对于遇到类似问题的其他人,我发现从PackageManager控制台重新启用迁移在某些情况下会有所帮助执行此操作之前,请确保您拥有迁移配置的副本。
Enable-Migrations -Force
…为所有面临类似问题的人添加一个可能的答案
(注意:这似乎是一个开放的故事,因为迁移部分仍然存在一些bug)。。。 此链接最接近我需要的内容
因此,您需要做3件事(按顺序-我指的是一个现有的项目):
(全部在PM控制台中)
- 确保PM控制台中的“默认项目”设置为您想要的项目(即,对于更大的解决方案)-这不一定与您的启动项目匹配!(并密切关注PM中的评论/回复,了解是否针对您想要的项目采取了行动)
- (1)
启用迁移-强制
- (2)
添加迁移初始值
- (3)
更新数据库-详细
- (4) 然后您可能需要将项目“移动”到根目录中
希望这对某人有帮助 编辑:如果您的数据模型项目(EF CF)是一个库-然后在PM控制台中将该项目设置为“默认项目”-并直接在该项目上运行上述所有内容(并在库本身中创建迁移配置等)。否则它会失败(当您的模型是一个lib时,同样的no MigrationHistory异常也会出现——并且没有为它定义迁移,在它内部——并且您在“主项目”上定义了迁移)
编辑:您需要将lib(EF模型)和“startup”项目(调用它)都移动到根目录中。看起来有些不同步。您手动创建了类吗?或者您使用向导进行测试,我只创建了一个名为Test的类,TestId为[Key],string属性为name。没有其他问题。确实出现了一些异常(只有在启用CLR exceptions Debug/exceptions时才会被捕获)-禁用也为我解决了(没有其他帮助)。如果有什么方法可以让您声明“在执行此操作之前,请确保您拥有迁移配置的副本”突出更多:)所有
Configuration.cs
内容都会以这种方式擦除:)