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());私はそれを試みたが、どちらもうまくいかなかった。 –
@PeterKellner初めてクエリを実行するときに呼び出されます。あなたはクエリを実行しようとしましたか? – Eranga
こんにちはEranga and J.W.私はシードを呼び出す必要があり、そうでないと思う簡単なコンソールアプリケーションを含めるように質問を更新しました。あなたが一見(とそれを貼り付けるとそれを実行する)ことができれば、私は本当にそれを感謝します。私は何かシンプルなものがあると確信していますが、それは何ヶ月も夢中になっています。 –