我有一个包含2个项目的解决方案,一个域类和一个webUI。
在域类中,我有2个模型,一个db上下文和一个数据库初始化器。
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);
}
}
}
运行应用程序时,未创建数据库。我不知道为什么。任何人都可以帮助我吗?我做错了什么?
答案 0 :(得分:1)
您必须在其中一个控制器中对数据库进行调用,才能创建它(按需创建)。如果您希望在应用程序启动时手动创建数据库,请参阅此处发布的答案:Entity Framework code first, isn't creating the database
以下代码仅设置您希望对数据库使用的初始值设定项。
Database.SetInitializer(new TodoDbInit());
为了实际使用它,您需要创建和访问数据库上下文的实体。