EF code首先,播种和部署 [英] EF Code first, seeding and deployment
问题描述
我想我们的种子与用户安装初始数据库(对于ASP.NET Web应用程序)。出于某种原因,它不能正常工作。香港专业教育学院读了大多说运行主题负载更新数据库
从控制台的伟大工程,但如何做这项工作在生产环境中?
作为一种尝试绕过这个我已经结束了与以下code - 什么?我在这里丢失
的Global.asax.cs ::的Application_Start()
尝试
{
initializationError = NULL;
WebSecurity.InitializeDatabaseConnection(DefaultConnection,用户配置,用户ID,用户名,autoCreateTables:真正的);
}
赶上(异常前)
{
initializationError =前;
}//初始化数据库和种子数据
Database.SetInitializer(新EntitiesContextInitializer());//现在初始化
使用(VAR上下文=新EMUI.Models.UsersContext())
{
如果(!context.Database.Exists())
{
context.Database.Initialize(真);
}
}
EntitiesContextInitializer
内部密封类EntitiesContextInitializer:MigrateDatabaseToLatestVersion< EMUI.Models.UsersContext,结构>
{
}
配置
内部密封类配置:DbMigrationsConfiguration< EMUI.Models.UsersContext>
{
公共配置()
{
AutomaticMigrationsEnabled = TRUE;
} 保护覆盖无效的种子(EM.Models.UsersContext上下文)
{
如果(!WebSecurity.Initialized)
{
WebSecurity.InitializeDatabaseConnection(DefaultConnection,用户配置,用户ID,用户名,autoCreateTables:真正的);
} 如果(!Roles.RoleExists(管理员))
{
Roles.CreateRole(管理员);
} //更多类似的播种
}
}
您需要做下面的步骤,使其作品:
1)让您的配置类作为一个公共的,不是内部
(迁移配置)
2)本code粘贴到您的Global.asax中的Application_Start:
//现在初始化
使用(VAR上下文=新EMUI.Models.UsersContext())
{
如果(!context.Database.Exists())
{
配置配置=新配置();
configuration.ContextType = typeof运算(EMUI.Models.UsersContext);
VAR迁移=新DbMigrator(配置);
migrator.Update();
}
}
希望它帮助。
I want to seed our initial database with users (for a ASP.NET web app) on install. For some reason its not working correctly. Ive read loads of topics that mostly say run update-database
which works great from the console but how does this work in a production environment?
As an attempt to circumvent this I have ended up with the following code - what am I missing here?
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>
{
}
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
}
}
You have to do the following steps to make it works:
1) make your Configuration class as a public, not internal
(Configuration of migrations)
2) paste this code to your 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();
}
}
Hope it helps.
这篇关于EF code首先,播种和部署的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!