He estado luchando intermitentemente con este problema desde 4.1 (ahora estoy en 4.3). Me parece que para obtener el método semilla llamada, todo lo que tendría que hacer es lo siguiente:método de inicialización no llamado con EntityFramework CodeFirst
1) Crear un catálogo de datos vacía en sqlserver 2) Ejecutar el código de abajo:
Database.SetInitializer(new DropCreateDatabaseAlways<SiteDB>());
tengo mi SiteDB define como sigue:
public class SiteDBInitializer :
DropCreateDatabaseAlways<SiteDB>
{
protected override void Seed(SiteDB db)
{
... (break point set here that never gets hit)
siento que debo estar perdiendo algo muy simple, porque esto crea mis cuadros, pero nunca se llama al método de siembra.
Para que esto sea más claro, aquí hay un ejemplo completo que incluye todo el código. Cuando lo ejecuto, la semilla nunca se llama:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Data.Entity;
namespace ConApp
{
internal class Program
{
private static void Main(string[] args)
{
Database.SetInitializer(new SiteDBInitializer());
using (var db = new SiteDB())
{
var x = db.Customers;
}
}
}
public class SiteDB : DbContext
{
public DbSet<Customer> Customers { get; set; }
}
public class Customer
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long Id { get; set; }
public string LastName { get; set; }
}
public class SiteDBInitializer :
DropCreateDatabaseAlways<SiteDB>
{
protected override void Seed(SiteDB db)
{
db.Customers.Add(new Customer() {LastName = "Kellner"});
db.Customers.Add(new Customer() {LastName = "Jones"});
db.Customers.Add(new Customer() {LastName = "Smith"});
db.SaveChanges();
}
}
}
Supongo que quiere decir: Database.SetInitializer (new SiteDBInitializer()); Intenté eso y tampoco funcionó. –
@PeterKellner Se llama cuando haces algo (por ejemplo, consultar) por primera vez. ¿Intentó ejecutar una consulta? – Eranga
Hola Eranga y J.W. He actualizado mi pregunta para incluir una aplicación de consola trivial que creo que debería llamarse a seed y no es así. Si pudieras echar un vistazo (e incluso pegarlo y ejecutarlo), realmente lo agradecería. Estoy seguro de que hay algo simple que me falta, pero ha estado volviendo loco durante meses. –