当EF是另一个项目时,DropCreateDatabaseIfModelChanges

时间:2016-11-20 08:11:50

标签: c# asp.net-mvc-5 entity-framework-6

我在单独的项目中分离了我的解决方案,一个带有实体框架的DAL项目和一个ASP.NET MVC项目。

我想使用DropCreateDatabaseIfModelChanges,但我不知道该把它放到哪里才能使它工作。

我试过把它放在MVC项目的web.config和DAL项目的app.config中(都是通过使用context元素),我试过把它放在global.asax中(Database.SetInitializer(new DropCreateDatabaseIfModelChanges<BreakAwayContext>());),我尝试了一个自定义初始化类,但这些似乎都不起作用。

如果可能,我不想使用迁移。我怎样才能使它发挥作用?

2 个答案:

答案 0 :(得分:3)

您可以创建一个类来实现CreateDatabaseIfNotExists并在Application_Start()中调用Database.SetInitializer函数。

-DbInitializer

public class MyDbInitializer : CreateDatabaseIfNotExists<MyDbContext>
{
    protected override void Seed(MyDbContext context)
    {
        //Data initializing...
    }
}

-Application_Start

protected void Application_Start() 
{ 
   Database.SetInitializer(new MyDbInitializer());
}

运行应用程序时将创建数据库。

如果您想自动迁移数据库,请使用MigrateDatabaseToLatestVersion class

public class Configuration :  DbMigrationsConfiguration<MyDbContext>
{
    public Configuration()
    {
        this.AutomaticMigrationsEnabled = true;            
    }

}

-Application_Start

Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDbContext,Configuration>());

Howerver,我重申使用migraion命令会更灵活。请参阅Bhavik Patel撰写的这篇文章:Overview of Entity Framework Code First Migrations with example

答案 1 :(得分:1)

我想通过'数据库初始化'实际上意味着'更新数据库模式'。

  1. 将EfRepository设置为解决方案的启动项目
  2. 打开包管理器控制台选择EfRepository作为默认项目
  3. 运行以下命令:

    启用 - 迁移-ConnectionStringName“EfDataRepository”

    Add-Migration Initial -ConnectionStringName“EfDataRepository”

    Update-Database -ConnectionStringName“EfDataRepository”-Script -SourceMigration:0

  4. 这将为您提供.sql脚本。针对您的数据库执行它(并且通常将其作为解决方案的一部分存储 - Create.sql或某种迁移.sql,取决于您是否已经拥有架构或者您是从头开始创建它。)

    当然,将EfDataRepository替换为.config文件中的数据连接名称。