【问题标题】:Entity Framework 4.3 doesn't create databaseEntity Framework 4.3 不创建数据库
【发布时间】:2012-02-20 16:37:11
【问题描述】:

我创建了新项目并向其中添加了最新的实体框架(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 中中断。

【问题讨论】:

  • 看起来有些东西不同步 stackoverflow.com/questions/3986160/…
  • 您是否手动创建了课程?或者你使用过向导
  • 为了测试,我只创建了一个名为 Test 的类,TestId 为 [Key],字符串属性名为 name。没有别的了。
  • 确实似乎发生了一些异常(仅当您启用 CLR 异常调试/异常时才捕获) - 禁用也为我解决了(没有其他帮助)。

标签: c# .net entity-framework


【解决方案1】:

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

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

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

Update-Database -Verbose

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

//MiniProfilerEF.Initialize();

在 MiniProfiler App_Start 中。


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

Enable-Migrations -Force

【讨论】:

  • 如果有某种方式可以让您声明“在执行此操作之前,请确保您拥有迁移配置的副本。”更突出:) 所有Configuration.cs 的东西都被这样删除了:)
【解决方案2】:

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

  • 确保将 PM 控制台中的“默认项目”设置为您想要的项目(即对于较大的解决方案) - 这不一定与您的启动项目相匹配! (并密切关注 PM 中的 cmets/response 是否针对您想要的项目采取了行动)
  • (1)Enable-Migrations -force
  • (2)Add-Migration Initial
  • (3)Update-Database -Verbose

...如果您仍然在 PM 控制台中遇到异常

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

我知道这听起来很傻,但这是我这边的主要问题 - 我有一堆解决方案文件夹,以上任何一个都将在解决方案文件夹中的项目上失败。但是,一旦我将项目移至根目录,一切正常(不再有异常,无论是否打开或关闭 CLR 的第一次机会异常)...
希望这可以帮助某人

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多