16

我有使用Entity Framwork 4.3及其迁移的ASP.NET MVC 3项目。现在我希望实体框架为我创建一个使用我已有的迁移的数据库。 当我尝试运行更新的数据库的脚本,它给了我下面的:如何使用代码优先迁移创建数据库?

Update-Database -Verbose -ProjectName AssemblyWithMigrations -StartUpProjectName WebProjectAssembly No migrations configuration type was found in the assembly '/* my name of assembly */'. (In Visual Studio you can use the Enable-Migrations command from Package Manager Console to add a migrations configuration).

但是,当我试图运行Enable-Migrations我看到以下内容:

Migrations have already been enabled in project 'AssemblyWithMigrations '. To overwrite the existing migrations configuration, use the -Force parameter.

所以,问题是EF试图解决当前的迁移版本来更新数据库,我想。但数据库不存在,它显然失败。

问题是:如何使用EF迁移创建数据库,如果它不存在?或者,使用Nuget控制台的正确方法是什么?

综上所述,我想: 1.运行命令(也许update-database),将使用我的web.config文件 2.所有迁移将创建的数据库在其创建顺序应用创建数据库。

谢谢。 :)

+1

我不认为迁移只是为了创建数据库来更新它们。 –

+0

如果数据库不存在,'Update-Database'会自动创建并应用每个迁移。你有任何额外的信息?在同一个项目中不应该发生“找不到迁移配置类型”和“迁移已启用”。 – bricelam

回答

32

我意识到这是一个老问题,但到底是什么....

为了使迁移创建我发现了以下工作以及初始数据库。

  1. 从SQL Server对象资源管理器中删除数据库
  2. 从迁移文件夹中删除所有现有的迁移。
  3. 在包管理控制台输入 “Add-迁移InitialCreate”

    [可选的,取决于你的数据库初始化]

  4. 在包管理控制台型 “更新数据库”

这将为您提供一个单一的迁移脚本,它将使您从“无数据库”转到拥有与您当前模型相匹配的数据库。

+0

感谢您的回答。我现在无法测试解决方案,但我相信它会起作用。 – sigurd

+0

步骤4将是:在PM控制台中,输入“更新数据库”,实际创建数据库。 –

+0

[编辑]非常正确 - 取决于您的数据库初始值设定项,此步骤也可能需要。我使用MigrateDatabaseToLatestVersion初始化程序。 –

3

使用迁移非常有用,但有时我发现在使用数据库时最好使用以下语句。

数据库初始化策略:使用任何与您相关的注释语句。

public DataContext(): base("DefaultConnection") 
{ 
    // Database.SetInitializer<DataContext>(new CreateDatabaseIfModelChanges<DataContext>()); 
    // Database.SetInitializer<DataContext>(new CreateDatabaseIfNotExists<DataContext>());                
    // Database.SetInitializer<DataContext>(new DropCreateDatabaseAlways<DataContext>()); 
}                                                             
相关问题