C# 实体框架4.3没有';不要创建数据库

C# 实体框架4.3没有';不要创建数据库,c#,.net,entity-framework,C#,.net,Entity Framework,我创建了一个新项目,并向其中添加了最新的实体框架(版本4.3)。我像以前的EF版本一样创建了类和上下文。但是,在应创建数据库的第一次运行期间(在我的示例中是SQL Server 2005),我收到以下错误: 执行命令定义时出错。有关详细信息,请参见内部异常 除了以下内部异常: 对象名称“dbo.\u MigrationHistory”无效 据我所知,此表用于迁移,但如果没有数据库,则此表不存在。我做错什么了吗 更多信息: 出于测试目的,我只创建了一个类: public class Test {

我创建了一个新项目,并向其中添加了最新的实体框架(版本4.3)。我像以前的EF版本一样创建了类和上下文。但是,在应创建数据库的第一次运行期间(在我的示例中是SQL Server 2005),我收到以下错误:

执行命令定义时出错。有关详细信息,请参见内部异常

除了以下内部异常:

对象名称“dbo.\u 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;}
}
公共类测试
{ 
[关键]
公共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)
    更新数据库-详细
…如果在PM控制台中仍然出现异常

  • (4) 然后您可能需要将项目“移动”到根目录中
我知道这听起来很傻,但这是我这边的主要问题——我有一堆解决方案文件夹,上面的任何一个都会在解决方案文件夹中的项目上失败。但是,一旦我将项目移动到根目录,一切都正常(不再有异常,或没有CLR的第一次机会异常处于打开或关闭状态)…
希望这对某人有帮助

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


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

看起来有些不同步。您手动创建了类吗?或者您使用向导进行测试,我只创建了一个名为Test的类,TestId为[Key],string属性为name。没有其他问题。确实出现了一些异常(只有在启用CLR exceptions Debug/exceptions时才会被捕获)-禁用也为我解决了(没有其他帮助)。如果有什么方法可以让您声明“在执行此操作之前,请确保您拥有迁移配置的副本”突出更多:)所有
Configuration.cs
内容都会以这种方式擦除:)