2012-03-15 32 views
6

Tôi gặp sự cố gây rụng tóc ...Làm cách nào để dừng EF (Mã đầu tiên) Kiểm tra các thay đổi lược đồ

Tôi có dự án xây dựng sử dụng Code First (EF); tất cả là tốt và nó hoạt động như một sự quyến rũ tuy nhiên, tôi không thể tìm thấy một cách thích hợp cho phép thay đổi Cơ sở dữ liệu (thông qua tập lệnh .sql) mà không có ứng dụng ném một cơn giận khi khởi động vì lược đồ đã thay đổi.

Tôi đã đọc và đọc vấn đề này, tôi đã xóa bảng EdmMetaData để nó không thể so sánh băm của cơ sở dữ liệu nhưng sau đó đọc có lỗi với EF ở chỗ nếu điều này bị xóa, nó vẫn nghĩ lược đồ đã thay đổi (vì nó không nhận ra bảng bị thiếu, vì vậy nó so sánh một chuỗi rỗng!).

Ngoài ra, tôi đã thử sử dụng Database.SetInitializer (null) trong tệp Global.asax nhưng điều này có nghĩa là tôi không thể truy cập Mô hình Dữ liệu sau này.

Mọi người đều nói về việc sử dụng tùy chọn thả các cơ sở dữ liệu nếu những thay đổi schema, vv

Đây là những gì tôi đang tìm kiếm:

Đối với EF/Mã đầu tiên để làm ... NOTHING! Sweet FA! Nowt!

... Nếu tôi thay đổi lược đồ qua ứng dụng bên ngoài, tôi muốn nó bỏ qua các thay đổi hoàn toàn và chỉ ASSUME tôi đã thực hiện các thay đổi mô hình liên quan để làm việc với các thay đổi cơ sở dữ liệu này, được thực hiện thông qua tập lệnh .sql. Nếu tôi bỏ lỡ một cột hoặc bảng, sau đó tôi chấp nhận ngu ngốc của tôi và tôi mong đợi một cơn giận dữ sau đó, nhưng, cho đến khi tôi làm sai, tôi muốn EF tin tưởng tôi.

Điều này có nghĩa là tôi có thể dễ dàng cập nhật bất kỳ (các) khách hàng nào của chúng tôi bằng tập lệnh .sql, bất kỳ lúc nào và không phải lo lắng về việc EF sẽ phát triển! :(

BẤT CỨ ý tưởng guys ??

+0

Vui lòng giải thích điều gì xảy ra nếu bạn đặt bộ khởi tạo cơ sở dữ liệu thành rỗng. –

Trả lời

5

Ngoài thiết initializer để null thêm cũng này đến lớp ngữ cảnh của bạn:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); 

    model.Conventions.Remove<IncludeMetadataConvention>(); 
} 

Nó sẽ tắt băm so sánh

7

Với hơn. Phiên bản Entity Framework gần đây, bạn không còn cần phải làm những gì Ladislav Mrnka nói, vì EF 4.3, bạn chỉ cần thiết lập bộ khởi tạo cho WebContext thành null. Ví dụ:

Database.SetInitializer<FabrikamFiberWebContext>(null); 
Các vấn đề liên quan