我在单独的项目中分离了我的解决方案,一个带有实体框架的DAL项目和一个ASP.NET MVC项目。
我想使用DropCreateDatabaseIfModelChanges
,但我不知道该把它放到哪里才能使它工作。
我试过把它放在MVC项目的web.config和DAL项目的app.config中(都是通过使用context元素),我试过把它放在global.asax中(Database.SetInitializer(new DropCreateDatabaseIfModelChanges<BreakAwayContext>());
),我尝试了一个自定义初始化类,但这些似乎都不起作用。
如果可能,我不想使用迁移。我怎样才能使它发挥作用?
答案 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)
我想通过'数据库初始化'实际上意味着'更新数据库模式'。
运行以下命令:
启用 - 迁移-ConnectionStringName“EfDataRepository”
Add-Migration Initial -ConnectionStringName“EfDataRepository”
Update-Database -ConnectionStringName“EfDataRepository”-Script -SourceMigration:0
这将为您提供.sql脚本。针对您的数据库执行它(并且通常将其作为解决方案的一部分存储 - Create.sql或某种迁移.sql,取决于您是否已经拥有架构或者您是从头开始创建它。)
当然,将EfDataRepository
替换为.config文件中的数据连接名称。