2012-05-23 52 views

Trả lời

21

Sử dụng này khi khởi động ứng dụng của bạn để tắt khởi sở dữ liệu và di cư:

Database.SetInitializer<YourContextType>(null); 
+0

Tôi thêm mã này vào Xây dựng, nhưng không giúp tôi – Greg

+0

Trình tạo quá muộn Greg. Đọc lại câu trả lời. Khởi động ứng dụng nằm trong global.asax của bạn – Stimul8d

+0

Có cách nào để tắt nó trên toàn cầu hay tôi phải làm điều này cho mỗi dbContext? – JMarsch

7

Nếu bạn muốn tắt cơ sở dữ liệu khởi tạo/di chuyển hoàn toàn không phụ thuộc, trong đó dự án bạn đang sử dụng bối cảnh của bạn, bạn có thể thêm một hàm tạo tĩnh vào ngữ cảnh của bạn để gọi trình khởi tạo. Điều này đảm bảo rằng SetInitializer sẽ được gọi một lần trước khi xây dựng/sử dụng đầu tiên của bối cảnh của bạn.

public class YourContext : DbContext 
{ 
    static YourContext() 
    { 
     // don't let EF modify the database schema... 
     Database.SetInitializer<YourContext >(null); 
    } 

    public YourContext() : base("name=YourContext") 
    {} 
    ... 
} 

Tuy nhiên, nếu bạn chỉ muốn thực hiện điều này trong một vài dự án chọn lọc, bạn nên làm điều đó một cách rõ ràng hơn thông qua khởi động ứng dụng - ví dụ: trong quá trình thiết lập IoC bình thường của bạn, như Ladislav đề xuất.

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