2016-11-20 23 views
0

我已将单独的项目中的解决方案分离出来,DAL项目包含实体框架和ASP.NET MVC项目。当EF是另一个项目时DropCreateDatabaseIfModel更改

我想使用DropCreateDatabaseIfModelChanges,但我不知道应该在哪里使它工作。我试图把它放在MVC项目的web.config和DAL项目的app.config中(都通过使用上下文元素),我试着把它放在全局中。 asax(Database.SetInitializer(new DropCreateDatabaseIfModelChanges<BreakAwayContext>());),我试过了一个自定义的初始化类,但是这些都不起作用。

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

回答

2

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

-DbInitializer

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

-Application_Start运行应用程序时

​​

数据库将被创建。

如果你想这样做数据库的自动迁移,使用MigrateDatabaseToLatestVersion

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

}

-Application_Start

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

Howerver,我recomand,使用migraion命令将更灵活。看到这个walkthru:Overview of Entity Framework Code First Migrations with example,Bhavik Patel。

+0

我只是试过这个解决方案,它似乎工作,我没有得到一个错误,说支持数据库的模型已经改变,但模型的变化没有被拿起。你有什么想法,为什么? –

+0

@Garth Marenghi,请使用[MigrateDatabaseToLatestVersion](https://msdn.microsoft.com/en-us/library/hh829293(v = vs.113).aspx),而我更新了答案。希望能帮助到你:) –

1

我猜'数据库初始化'你的意思是'更新数据库模式'。

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

    启用的迁移-ConnectionStringName“EfDataRepository”

    Add-Migration Initial -ConnectionStringName“EfDataRepository”

    更新,数据库-ConnectionStringName “EfDataRepository” -Script -SourceMigration:0

这会给你一个.SQL脚本。在数据库中执行它(通常将它作为解决方案的一部分存储 - Create.sql或某种迁移.sql,取决于您是否已经有一个模式,或者您是从头开始创建的)。

当然,请使用.config文件中的数据连接名替换EfDataRepository

+0

那么,我的意思是我想要做一些像'Database.SetInitializer(新的DropCreateDatabaseIfModelChanges ());'因为我只是在处理一些小的东西。从我收集的信息来看,你是在暗示使用迁移。这是分离项目时唯一的选择吗?谢谢! –

+0

我建议你总是从你的Entities项目中生成.sql脚本,并且从他们手动更新/创建数据库。这是一种迁移,是的。第一次生成脚本(Create.sql,就像我所说的)也是一种迁移。 –

相关问题