自從4.1(現在我在4.3上)以來,我一直在爲這個問題而掙扎。在我看來,要獲得被稱爲種子的方法,都是我應該做的是:未使用EntityFramework調用的種子方法CodeFirst
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)
我覺得我必須失去了一些東西很簡單,因爲這造成我的表,但永遠不會調用種子的方法。
爲了更清楚地說明,下面是一個包含所有代碼的完整示例。當我運行它時,種子永遠不會被調用:
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();
}
}
}
我假設你的意思是:Database.SetInitializer(new SiteDBInitializer());我試過了,也沒有奏效。 – 2012-02-17 03:28:51
@PeterKellner當你第一次做某事(例如查詢)時會被調用。你嘗試執行查詢嗎? – Eranga 2012-02-17 03:44:28
嗨Eranga和J.W.我已經更新了我的問題,以包含一個簡單的控制檯應用程序,我相信種子應該被調用,而不是。如果你可以看看(甚至粘貼並運行它),我真的很感激它。我敢肯定,我錯過了一些簡單的東西,但幾個月來它一直在瘋狂。 – 2012-02-17 05:06:25