2012-11-02 90 views
6

也許是我措辭不當的問題,但在我global.asx文件我用是否有命令檢查實體框架中是否存在數據庫?

if (System.Diagnostics.Debugger.IsAttached) 
     { 
      var test = new TestDbSeeder(App_Start.NinjectWebCommon.UcxDbContext); 
      test.seed(); 
     } 

這種檢查是否調試器附加和運行我的測試播種機,使我的驗收測試總是傳遞。

我需要檢查,看是否存在數據庫,以及如果不先運行此代碼:

var test2 = new DataSeeder(); 
    test2.Seed(App_Start.NinjectWebCommon.UcxDbContext); 

這dataseeder是具有總是在數據庫中的實際數據。是否有命令檢查數據庫是否存在,以便我可以運行該代碼塊。謝謝!

回答

14

Database.Exists方法是否適合您?

if (!dbContext.Database.Exists()) 
    dbContext.Database.Create(); 

編輯#1回答評論

public class DatabaseBootstrapper 
{ 
    private readonly MyContext context; 

    public DatabaseBootstrapper(MyContext context) 
    { 
     this.context = context; 
    } 

    public void Configure() 
    { 
     if (context.Database.Exists()) 
      return; 

     context.Database.Create(); 
     var seeder = new Seeder(context); 
     seeder.SeedDatabase(); 
    } 
} 

這應該做的正是你想要的。在你的global.asax文件中...

public void Application_Start() 
{ 
    var context = ...; // get your context somehow. 
    new DatabaseBootstrapper(context).Configure(); 
} 
+0

也許你知道我在哪裏可以看到如何使用它的例子嗎?我在網上搜索並沒有發現任何東西 – Robert

+0

我通常在測試中有一個TestHelper類,它可以做站立數據庫,內存HTTP服務器等工作。所以從我的測試夾具設置中,我可以調用'TestHelper.CreateDatabase()',這正是上面的代碼。然後在我的測試夾具拆卸中,我調用TestHelper.DestroyDatabase()。這實際上很簡單。 –

+0

我不認爲這是我正在尋找的。我希望能夠訪問global.asx文件中的某些內容,檢查數據庫是否存在,以及是否不運行我的播種機。如果是,則跳過步驟 – Robert

相關問題