C# 实体框架代码优先,isn';t创建数据库
以下是我的解决方案的概述: 这是我的PizzaSoftwareData课程: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
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()-工作正常。