2011-03-24 12 views
11

He aquí un resumen de cómo se ve mi solución:Código Marco de la entidad en primer lugar, no está creando la base de datos

enter image description here

Aquí es mi clase 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; } 
    } 
} 

De acuerdo con un ejemplo sobre Scott En el blog de Guthrie, debe ejecutar este código al principio de la aplicación para crear/actualizar el esquema de la base de datos.

Database.SetInitializer<PizzaSoftwareData>(new CreateDatabaseIfNotExists<PizzaSoftwareData>()); 

estoy corriendo esa línea de código de Program.cs en PizzaSoftware.UI.

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()); 
     } 
    } 
} 

¿Alguien me puede decir por qué no se están creando las tablas en la base de datos?

Aquí está la cadena de conexión en mi archivo 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> 

Respuesta

26

inicializador se ejecuta cuando se necesita para acceder a la base de datos. Si desea crear la base de datos al iniciar la aplicación, ya sea uso:

context.Database.Initialize(true); 

O no utiliza inicializador y llamar:

context.Database.CreateIfNotExists(); 
+0

donde woul d esta línea ir? – mmcrae

+0

@mmcrae: Para la inicialización de la aplicación. Depende del tipo de aplicación. –

+0

En mi caso, de alguna manera Database.Initialize (true) throws exception: Se lanzó la excepción de tipo 'System.StackOverflowException'. Database.CreateIfNotExists() - funciona bien. –

4

En lugar de poner este código en el método principal:

Database.SetInitializer<PizzaSoftwareData>(new CreateDatabaseIfNotExists<PizzaSoftwareData>()); 

Ponla en 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; } 
    } 
} 
Cuestiones relacionadas