2012-04-14 23 views
1

我想使用自定義數據庫初始值設定項來播種一些數據,但無法使其工作。我試着給appConfig文件添加一些配置,但是這也不起作用。在自定義數據庫初始值設定項中播種數據將不起作用/ EF,Code First

這是一個WPF應用程序,我不想引用我的EntityLibrary。我想使用上下文的構造函數來播種數據。它出什麼問題了?

編輯:問題是沒有數據填充。調試時,我看到上下文的構造函數SetInitiazlier函數被調用,但被覆蓋的Seed方法永遠不會被調用,實際上調試器永遠不會進入Seed方法。

與此同時,XAML解析器給出了一個抱怨 DropCreateDatabaseIfModelChanges的TContext類型參數的錯誤。因爲我沒有家裏的代碼,所以我無法給出確切的錯誤。

這是我的自定義初始化:

public class DbInitializer : DropCreateDatabaseIfModelChanges<DemirbaşContext> 
    { 
     protected override void Seed(DemirbaşContext context) 
     { 
      Kullanıcı kullanıcı = new Kullanıcı 
      { 
       Ad = "Mert", 
       Soyad = "Mert", 
       KullanıcıAdı = "admin", 
       Şifre = "password", 
       Email = "[email protected]" 
      }; 

      context.Kullanıcılar.Add(kullanıcı); 
      context.SaveChanges(); 

      base.Seed(context); 
     } 
    } 

這是我的上下文構造:

public DemirbaşContext():base("Demirbaş") 
    { 
     Database.SetInitializer<DemirbaşContext>(new DbInitializer()); 
    } 

編輯1:這裏是我當前的代碼,但它仍然沒有播種數據。你能看到有什麼問題嗎?

初始化程序:

public class DbInitializer : DropCreateDatabaseIfModelChanges<DemirbaşContext> 
{ 
    protected override void Seed(DemirbaşContext context) 
    { 
     Kullanıcı kullanıcı = new Kullanıcı 
     { 
      Ad = "Mert", 
      Soyad = "Mert", 
      KullanıcıAdı = "admin", 
      Şifre = "password", 
      Email = "[email protected]" 
     }; 

     context.Kullanıcılar.Add(kullanıcı); 
     context.SaveChanges(); 

    } 
} 

應用程序啓動:

public partial class App : Application 
    { 
     public App() 
     { 
      // Seed data, remove after getting seeding in custom db initiazlier to work 
      DemirbaşContext context = new DemirbaşContext(); 
      DbInitializer initializer = new DbInitializer(); 
      Database.SetInitializer<DemirbaşContext>(initializer); 
      context.Database.Initialize(false); 
     } 
    } 
+1

*我試圖使用自定義數據庫初始值設定項來播種一些數據,但無法使其工作。我嘗試將一些配置添加到appConfig文件,但這也不起作用。*不是對問題的描述。每次我看到*它不工作*沒有解釋真正發生了什麼(例外,沒有數據庫,沒有數據等)我正在考慮downvoting和投票結束這個問題爲「不是一個真正的問題」。提出一個好的描述性問題是獲得答案的必要步驟。 – 2012-04-14 10:15:19

+0

你說得對。我編輯了這個問題。我希望現在更清楚。 – 2012-04-14 12:36:10

+0

你有沒有在你的應用程序中使用過EF?從數據庫加載東西或存儲到數據庫的東西? – 2012-04-14 13:03:14

回答

3

移動你的初始化代碼到你的應用程序的啓動。它不屬於上下文的構造函數,並強制手動初始化:

Database.SetInitializer<DemirbaşContext>(new DbInitializer()); 
context.Database.Initialize(false); 
+0

EF 4.3.1中的數據庫類中沒有Initialize方法,我認爲它帶有5.0 Beta。 4.3.1有什麼選擇? – 2012-04-16 06:23:58

+0

對不起。這是實例方法 - 我修改了答案。 – 2012-04-16 08:03:20

相關問題