2012-02-20 58 views
6

我创建了新项目,并为其添加了最新的实体框架(版本4.3)。我在之前的EF版本中创建了类和上下文。但是,如果要创建数据库的第一个运行期间(在我的情况下,它是SQL Server 2005中),我收到以下错误:实体框架4.3不创建数据库

An error occurred while executing the command definition. See the inner exception for details.

用下面的内部异常:

Invalid object name '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中抛出未处理的异常,并在视觉突破工作室。例外是System.Data.EntityCommandExecutionException。一旦我忽略了这种期望并且没有停止代码执行,就创建了数据库。

更新2

使用数据库的另一个几个小时后,我发现,与启用的迁移选项,并更新数据库打从控制台也就是解决这个问题。它在应用程序启动之前创建数据库,并且不会在Visual Studio中中断。

+0

看上去就像是失去同步 http://stackoverflow.com/questions/3986160/an-error-occurred-while-executing-the-command-definition-see-the-inner-exceptio – 2012-02-20 16:51:51

+0

有你手动创建类?或者您已经使用了向导 – 2012-02-20 17:27:23

+0

对于测试,我只创建了一个名为Test的TestDef,名称为[Key],字符串属性名为name。没有别的。 – Marcin 2012-02-20 17:45:33

回答

3

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

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

如果做不到这一点,你能尝试更新从Package Manager控制台你的数据库,看看你得到任何进一步的信息。

Update-Database -Verbose 

可能无关的,你的情况,但我用MvcMiniProfiler 1.9时,得到同样的错误。如果你正在使用它太,确保EF分析被注释掉线时截止:

//MiniProfilerEF.Initialize(); 

内MiniProfiler App_Start。


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

Enable-Migrations -Force 
+0

如果只有某些方面可以做出陈述“在做这件事之前确保您有一份移植配置的副本”。突出的更多:)所有的'Configuration.cs'东西都被这样擦掉:) – 2013-07-20 04:22:02

2

...,只是多加一个可能的答案都面临着类似的问题,这些
(注:这是一个开放式的故事似乎,因为与迁移是很明显的一些错误仍然部分)... 此链接来到最接近我需要什么
Error when running Update-Database with EF 4.3 所以,你需要做三件事情(按顺序 - 我指的是现有的项目):
(均在PM控制台)

  • 确保PM控制台中的“默认项目”已设置为您所需的项目(即适用于更大的解决方案) - 这不一定与您的启动项目相匹配! (和密切关注PM的意见/响应,以行动是否是你想要的项目取得)
  • (1)Enable-Migrations -force
  • (2)Add-Migration Initial
  • (3)Update-Database -Verbose

...如果你仍然得到PM控制台异常

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

听起来很愚蠢我知道,但那是我的主要问题 - 我有一堆解决方案文件夹,上述任何一个都会在解决方案文件夹中的项目上失败。但是,一旦我感动的项目去根,一切正常(没有更多的例外,有或W/O为CLR第一次机会异常开启或关闭)...
希望这有助于有人

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

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