[英]EF Code first, seeding and deployment
我想在安装时向用户(对于ASP.NET Web应用程序)播种我们的初始数据库。 由于某种原因,它无法正常工作。 我已经读了很多主题,其中大部分都说运行update-database
在控制台上很好用,但是在生产环境中如何工作?
为了避免这种情况,我最终得到了以下代码-我在这里缺少什么?
Global.asax.cs中::的Application_Start()
try
{
initializationError = null;
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
}
catch (Exception ex)
{
initializationError = ex;
}
// Initialize database and seed data
Database.SetInitializer(new EntitiesContextInitializer());
// Now initialize it
using (var context = new EMUI.Models.UsersContext())
{
if (!context.Database.Exists())
{
context.Database.Initialize(true);
}
}
EntitiesContextInitializer
internal sealed class EntitiesContextInitializer : MigrateDatabaseToLatestVersion<EMUI.Models.UsersContext, Configuration>
{
}
组态
internal sealed class Configuration : DbMigrationsConfiguration<EMUI.Models.UsersContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
}
protected override void Seed(EM.Models.UsersContext context)
{
if (!WebSecurity.Initialized)
{
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
}
if (!Roles.RoleExists("Administrator"))
{
Roles.CreateRole("Administrator");
}
// More similar seeding
}
}
您必须执行以下步骤才能使其工作:
1)将您的Configuration类设为公共而非internal
(迁移配置)
2)将此代码粘贴到您的application_Start of global.asax中:
// Now initialize it
using (var context = new EMUI.Models.UsersContext())
{
if (!context.Database.Exists())
{
Configuration configuration = new Configuration();
configuration.ContextType = typeof(EMUI.Models.UsersContext);
var migrator = new DbMigrator(configuration);
migrator.Update();
}
}
希望能帮助到你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.