метод seed не вызывается с помощью EntityFramework CodeFirst

Я постоянно боролся с этой проблемой, начиная с версии 4.1 (теперь я смотрю на 4.3). Мне кажется, что для вызова метода seed все, что мне нужно сделать, это следующее:

1) Создать пустой каталог данных на sqlserver 2) Выполните приведенный ниже код:

Database.SetInitializer(new DropCreateDatabaseAlways<SiteDB>());

Моя SiteDB определена следующим образом:

public class SiteDBInitializer : 
    DropCreateDatabaseAlways<SiteDB>
{
    protected override void Seed(SiteDB db)
    {
           ... (break point set here that never gets hit)

Мне кажется, что мне не хватает чего-то очень простого, потому что это создает мои таблицы, но никогда не вызывает метод seed.

Чтобы прояснить это, вот полный пример, который включает весь код. Когда я запускаю его, сид никогда не вызывается:

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

}
15
задан Peter Kellner 17 February 2012 в 05:05
поделиться