现在,在开发中,我在Global.asax.cs文件中有以下代码,它使用SeedSampleData方法调用Entity Framework(v4.1)SetInitializer.这一切都很完美.
但是,我想通过web.config设置存储SetInitializer“strategy”参数,以便我可以创建一个部署脚本,该脚本将自动将其设置为新的System.Data.Entity.CreateDatabaseIfNotExists< EfDbContext>()而不是我的种子生产部署过程中的方法.
想要将其移动到web.config的原因是,当我向产品服务器推出新的部署时,我想确保我不会意外离开我的种子初始化器在代码中.
protected void Application_Start() { //TODO: Figure out how to move the following lines to web.config and have a deployment script modify it when going to production. //This line is for production //System.Data.Entity.Database.SetInitializer(new System.Data.Entity.CreateDatabaseIfNotExists<EfDbContext>()); //This line is for development System.Data.Entity.Database.SetInitializer(new Domain.Concrete.SeedSampleData()); //... Remainder of Application_Start calls here... }
解决方法
如果你更新到EF 4.3(这是一个好主意),那么你可以在你的web配置中使用这样的东西:
<configuration> <configSections> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection,EntityFramework,Version=4.3.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" /> </configSections> <entityFramework> <contexts> <context type=" Blogging.BlogContext,MyAssembly"> <databaseInitializer type="Blogging.MyCustomBlogInitializer,MyAssembly" /> </context> </contexts> </entityFramework> </configuration>
罗文在这里详细介绍了:http://blogs.msdn.com/b/adonet/archive/2012/01/12/ef-4-3-configuration-file-settings.aspx
如果你真的想继续使用4.1,那么你可以使用一个旧的语法.我在这里写道:http://blog.oneunicorn.com/2011/03/31/configuring-database-initializers-in-a-config-file/