如何使用代码首次迁移创建数据库?

时间:2012-05-23 11:03:43

标签: entity-framework entity-framework-4.3 ef-migrations

我正在使用ASP.NET MVC 3项目,该项目使用Entity Framwork 4.3及其迁移。现在我希望Entity Framework使用我已经进行的迁移为我创建数据库。 当我尝试运行Update-Database脚本时,它给出了以下内容:

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.所有迁移将按创建顺序应用于创建的数据库。

感谢。 :)

2 个答案:

答案 0 :(得分:40)

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

要启用迁移以创建初始数据库,我发现以下方法效果很好。

  1. 从SQL Server对象资源管理器中删除数据库
  2. 从“迁移”文件夹中删除所有现有迁移。
  3. 在Package-Management-Console类型“Add-Migration InitialCreate”

    [可选,取决于您的数据库初始化程序]

  4. 在Package-Management-Console中输入“update-database”
  5. 这将为您提供一个迁移脚本,它将带您从“无数据库”到拥有与您当前模型匹配的数据库。

答案 1 :(得分:3)

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

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

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