[英]Create database in App_Start
我有一个包含2个项目,一个域类和一个webUI的解决方案。
在域类中,我有2个模型,一个数据库上下文和一个数据库初始化程序。
List.cs:
namespace Todo.Domain
{
public class List
{
public int ListID { get; set; }
public string Day { get; set; }
public ICollection<Task> Tasks { get; set; }
}
}
Task.cs:
namespace Todo.Domain
{
public class Task
{
public int TaskID { get; set; }
public int ListID { get; set; }
public string TodoTask { get; set; }
}
}
EFDbContext.cs:
namespace Todo.Domain
{
public class EFDbContext : DbContext
{
public EFDbContext() : base("TodoList") { }
public DbSet<List> Lists { get; set; }
public DbSet<Task> Tasks { get; set; }
}
}
初始化器:
namespace Todo.Domain
{
public class TodoDbInit : System.Data.Entity.DropCreateDatabaseIfModelChanges<EFDbContext>
{
protected override void Seed(EFDbContext context)
{
var list = new List<List>
{
new List { Day="Måndag" }
};
list.ForEach(s => context.Lists.Add(s));
context.SaveChanges();
var task = new List<Task>
{
new Task { TodoTask="Fisk" }
};
task.ForEach(s => context.Tasks.Add(s));
context.SaveChanges();
}
}
}
现在,当我启动应用程序时,我希望创建数据库。 我已经放置了一个setInitializer Global.asax:
namespace Todo.WebUI
{
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
Database.SetInitializer(new TodoDbInit());
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
}
}
当我运行应用程序时,未创建数据库。 我不知道为什么 我做错什么了吗?
您必须在一个控制器中对您的数据库进行调用才能创建它(按需创建)。 如果您希望在应用程序启动时手动创建数据库,请参见此处发布的答案: 首先是实体框架代码,而不是创建数据库
以下代码仅针对数据库设置了您希望使用的初始化程序。
Database.SetInitializer(new TodoDbInit());
为了使其能够实际使用,您将需要创建和访问数据库上下文的实体。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.