在App_Start中创建数据库

时间:2015-10-28 15:20:11

标签: c# entity-framework

我有一个包含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);
        }
    }
}

运行应用程序时,未创建数据库。我不知道为什么。任何人都可以帮助我吗?我做错了什么?

1 个答案:

答案 0 :(得分:1)

您必须在其中一个控制器中对数据库进行调用,才能创建它(按需创建)。如果您希望在应用程序启动时手动创建数据库,请参阅此处发布的答案:Entity Framework code first, isn't creating the database

以下代码仅设置您希望对数据库使用的初始值设定项。

Database.SetInitializer(new TodoDbInit());

为了实际使用它,您需要创建和访问数据库上下文的实体。