当我实现DropCreateDatabaseAlways时,Entity Framework 4.1不会丢弃数据库

时间:2011-12-04 22:56:47

标签: asp.net-mvc-3 entity-framework-4.1 ef-code-first sql-server-2008-r2

我创建了一个实现DbContext“BeerRecommenderContext”的上下文类和一个实现

的初始化器
DropCreateDatabaseAlways<BeerRecommenderContext>

当我运行/调试项目时,实体框架不会删除旧数据库并创建新数据库,因此不会反映模型中的更改,从而导致问题。然后我手动删除数据库并重新运行,实体框架不创建数据库。我第二次运行它,实体框架成功构建了新数据库。我对连接字符串不是很熟悉所以它可能是一个问题:

<add name="BeerRecommenderContext"
     connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;
     database=BeerRecommenderContext.mdf;
     AttachDBFilename=|DataDirectory|BeerRecommenderContext.mdf;
     User Instance=true"
     providerName="System.Data.SqlClient" />

在我的Global.asax.cs文件的Application_Start方法中,我添加了一行

Database.SetInitializer<BeerRecommenderContext>(new BeerRecommenderInitializer());

如何让DropCreateDatabaseAlways正常运行?

1 个答案:

答案 0 :(得分:1)

我发现将Database.SetInitializer添加到Application_Start不会每次都有效。

我在DbContaxt中添加了一个静态构造函数,它调用了Database.SetInitializer

public class BeerRecommenderContext: DbContext
{

    static BeerRecommenderContext ()
    {
        Database.SetInitializer<BeerRecommenderContext >(new BeerRecommenderInitializer());
    }
}