2012-11-02 34 views
6

tôi có thể đã worded câu hỏi kém nhưng trong tập tin global.asx của tôi sử dụngCó lệnh nào để kiểm tra xem cơ sở dữ liệu có tồn tại từ Khung thực thể không?

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

này sẽ kiểm tra xem trình gỡ lỗi được gắn và chạy seeder thử nghiệm của tôi để kiểm tra sự chấp nhận của tôi lúc nào cũng vượt qua.

Tôi cần phải kiểm tra xem cơ sở dữ liệu tồn tại như tốt và nếu không chạy mã này đầu tiên:

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

dataseeder Đây là dữ liệu thực tế mà đã luôn luôn ở trong cơ sở dữ liệu. Có một lệnh để kiểm tra nếu cơ sở dữ liệu tồn tại để tôi có thể chạy khối mã đó. Cảm ơn!

Trả lời

14

Phương thức Database.Exists có phù hợp với bạn không?

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

Chỉnh sửa # 1 để trả lời bình luận

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(); 
    } 
} 

Điều đó sẽ làm chính xác những gì bạn muốn. Trong tệp global.asax của bạn ...

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

Có thể bạn biết nơi tôi có thể xem ví dụ về cách sử dụng? Tôi thường googling xung quanh và không tìm thấy bất cứ điều gì trên nó – Robert

+0

Tôi thường có một lớp TestHelper trong các bài kiểm tra của tôi có thể làm những việc như đứng lên một cơ sở dữ liệu, một máy chủ HTTP trong bộ nhớ, vv. 'TestHelper.CreateDatabase()', chính xác là đoạn mã trên. Sau đó, trong thử nghiệm của tôi cố định teardown, tôi gọi 'TestHelper.DestroyDatabase()'. Nó thật sự dễ dàng. –

+0

Tôi không nghĩ rằng đó là những gì tôi đang tìm kiếm. Tôi đã hy vọng để truy cập một cái gì đó trong tập tin global.asx kiểm tra để xem nếu cơ sở dữ liệu tồn tại và nếu nó không sau đó chạy seeder của tôi. Nếu có thì hãy bỏ qua bước – Robert

Các vấn đề liên quan