C# 实体框架代码优先,isn';t创建数据库

C# 实体框架代码优先,isn';t创建数据库,c#,ef-code-first,entity-framework-4.1,C#,Ef Code First,Entity Framework 4.1,以下是我的解决方案的概述: 这是我的PizzaSoftwareData课程: namespace PizzaSoftware.Data { public class PizzaSoftwareData : DbContext { public DbSet<Customer> Customers { get; set; } public DbSet<Order> Orders { get; set; } pu

以下是我的解决方案的概述:

这是我的PizzaSoftwareData课程:

namespace PizzaSoftware.Data
{
    public class PizzaSoftwareData : DbContext
    {
        public DbSet<Customer> Customers { get; set; }
        public DbSet<Order> Orders { get; set; }
        public DbSet<Product> Products { get; set; }
        public DbSet<User> Users { get; set; }
    }
}
名称空间PizzaSoftware.Data
{
公共类PizzaSoftwareData:DbContext
{
公共数据库集客户{get;set;}
公共数据库集命令{get;set;}
公共数据库集产品{get;set;}
公共数据库集用户{get;set;}
}
}
根据Scott Guthrie博客上的一个示例,为了创建/更新数据库模式,必须在应用程序的开头运行此代码

Database.SetInitializer<PizzaSoftwareData>(new CreateDatabaseIfNotExists<PizzaSoftwareData>());
Database.SetInitializer(新的CreateDatabaseIfNotExists());
我正在运行PizzaSoftware.UI中Program.cs中的那行代码

namespace PizzaSoftware.UI
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Database.SetInitializer<PizzaSoftwareData>(new CreateDatabaseIfNotExists<PizzaSoftwareData>());
            Application.Run(new LoginForm());
        }
    }
}
namespace PizzaSoftware.UI
{
静态类程序
{
/// 
///应用程序的主要入口点。
/// 
[状态线程]
静态void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
SetInitializer(新的CreateDatabaseIfNotExists());
运行(新的LoginForm());
}
}
}
有人能告诉我为什么数据库没有创建表吗

以下是我的App.config文件中的连接字符串:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name="PizzaSoftwareData"
         connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=SaharaPizza;Integrated Security=True;Pooling=False"
         providerName="System.Data.Sql" />
  </connectionStrings>
</configuration>

当您需要访问数据库时,会执行初始值设定项。如果要在应用程序启动时创建数据库,请使用:

context.Database.Initialize(true);
或者不要使用初始值设定项并调用:

context.Database.CreateIfNotExists();

不要将此代码放入main方法中:

Database.SetInitializer<PizzaSoftwareData>(new CreateDatabaseIfNotExists<PizzaSoftwareData>());
Database.SetInitializer(新的CreateDatabaseIfNotExists());
把它放到DBContext中:

namespace PizzaSoftware.Data
{
public class PizzaSoftwareData : DbContext
{
        public PizzaSoftwareData()
        : base("name=PizzaSoftwareData")
        {
        Database.SetInitializer<PizzaSoftwareData>(new CreateDatabaseIfNotExists<PizzaSoftwareData>());
        }
        public DbSet<Customer> Customers { get; set; }
        public DbSet<Order> Orders { get; set; }
        public DbSet<Product> Products { get; set; }
        public DbSet<User> Users { get; set; }
    }
}
名称空间PizzaSoftware.Data
{
公共类PizzaSoftwareData:DbContext
{
公共披萨软件数据()
:base(“名称=PizzaSoftwareData”)
{
SetInitializer(新的CreateDatabaseIfNotExists());
}
公共数据库集客户{get;set;}
公共数据库集命令{get;set;}
公共数据库集产品{get;set;}
公共数据库集用户{get;set;}
}
}

这一行将转到哪里?@mmcrae:到应用程序的初始化。这取决于应用程序类型。在我的例子中,Database.Initialize(true)抛出异常:抛出了类型为“System.StackOverflowException”的异常。Database.CreateIfNotExists()-工作正常。