1

我已经创建了一个实现的DbContext“BeerRecommenderContext”一个上下文类,当我运行/调试项目实现实体框架4.1时,我实现

DropCreateDatabaseAlways<BeerRecommenderContext> 

的初始化程序DropCreateDatabaseAlways不删除数据库,实体框架做不要删除旧的数据库并创建一个新的数据库,以免模型中的更改导致问题。然后我手动删除数据库并重新运行,实体框架不会创建数据库。我第二次运行它,实体框架成功构建新的数据库。我不是很熟悉连接字符串所以它可能是有一个问题:

<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

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

添加静态构造函数,它调用Database.SetInitializer

public class BeerRecommenderContext: DbContext 
{ 

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