2012-11-02 58 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

相关问题