没有使用EntityFramework CodeFirst调用种子方法

Pet*_*ner 15 entity-framework code-first entity-framework-4 ef-code-first

自从4.1(现在我在4.3)以来,我一直在努力解决这个问题.在我看来,要调用种子方法,我应该做的就是以下内容:

1)在sqlserver上创建一个空数据目录2)执行以下代码:

Database.SetInitializer(new DropCreateDatabaseAlways<SiteDB>());
Run Code Online (Sandbox Code Playgroud)

我的SiteDB定义如下:

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

我觉得我必须错过一些非常简单的东西,因为这会创建我的表,但绝不会调用种子方法.

为了更清楚,这是一个包含所有代码的完整示例.当我运行它时,种子永远不会被调用:

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

}
Run Code Online (Sandbox Code Playgroud)

J.W*_*.W. 8

你需要打电话Database.SetInitializer(new SiteDBInitializer());.

  • 我终于厌倦了没有真正理解这一切是如何工作的所以我今天早上花了几个小时写了三篇博文来解释这一切.感谢大家的帮助.http://peterkellner.net/2012/02/17/entityframework-4-3-codefirst-trivial-one-file-example-part-1/ (3认同)