我从4.1版本开始一直在苦苦挣扎这个问题(现在我使用的是4.3版本)。在我看来,为了调用种子方法,我只需要执行以下步骤:
1)在SQL Server上创建一个空的数据目录 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方法。
为了更清晰地说明,这里是包含所有代码的完整示例。当我运行它时,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();
}
}
}