DropCreateDatabaseAlways种子未调用
我在自定义数据库初始化程序中调用Seed方法时遇到问题。 我正在使用EF 5.0并具有以下代码:
public static class MyDatabase { public static void Initialize() { Database.SetInitializer(new MyInitializer()); } } public class MyInitializer : DropCreateDatabaseAlways { protected override void Seed(MyContext context) { base.Seed(context); context.Roles.Add(new Role { ID = 1, Name = "User", }); context.Roles.Add(new Role { ID = 2, Name = "Admin", }); context.SaveChanges(); } }
这两个类存在于MVC应用程序的单独类库中。 在Global.asax
,我调用Initialize()
方法:
MyDatabase.Initialize();
数据库创建得很好,只是没有调用Seed(MyContext context)
方法,没有数据放入我的数据库。
您将在以后使用上下文时创建数据库,或者您可以始终使用Global.asax.cs中的Application_Start()方法中的上下文强制创建数据库,如:
System.Data.Entity.Database.SetInitializer(new MyInitializer()); MyContext db = new MyContext(); db.Database.Initialize(true);
在我的情况下,没有调用Seed,因为我启用了迁移。 当我删除迁移时,它有效。 http://entityframework.codeplex.com/workitem/1689
将第一个SQL查询发送到数据库后,将调用Seed
方法,而不是在Application_Start
。 例如:
using (var ctx = new MyContext()) { var rolesCount = ctx.Roles.Count(); // should return 2 }
- 文件类型与应用程序的关联(C#)
- Oracle.DataAccess.Client.OracleException ORA-03135:连接丢失联系
- .NET ShellExtension(Framework 4.5,Windows 8.1,SharpShell)无效
- 在.net / sql server中处理bc日期的最佳方法是什么?
- 定义每个子类定义一次的静态属性的最佳方法是什么?
- 从powershell-script登录到csharp-program(log4net-logfile)
- entity framework,鉴别器列,但没有inheritance
- .NET DB2 OLEDB先决条件
- 使用.Net检测外部应用程序中的拖放操作