2012-01-26 30 views
6

Tôi đang thử nghiệm với EF 4.3 (beta)Cách bỏ qua bảng/lớp trong di chuyển EF 4.3

Tôi có một số lớp mới sẽ tạo bảng và cột db.

Từ một dự án cũ, tôi có một số bảng cũ trong lược đồ của mình, mà tôi muốn truy cập qua EF. Tất cả các lớp học được khai báo. Để truy cập vào bảng cũ, có một poco được ánh xạ.

Việc di chuyển db cũng cố gắng tạo bảng cũ đó.

Làm cách nào để thiết lập lớp/bảng này không phải là một phần của quá trình di chuyển, nhưng là một phần của mô hình ef?

xxx.OnModelCreating()  
{ 
    modelBuilder.Ignore<myOldTableClass>();  
} 

xóa toàn bộ lớp khỏi mô hình. cuối cùng tôi không thể sử dụng nó để truy cập thông qua dbContext.

tôi thích sử dụng tính năng di chuyển tự động. tôi cố gắng tránh di chuyển hoàn toàn các bảng db cũ sang các lớp EF. (Có, tôi biết có máy phát điện cho điều đó) có 120 bảng, mà vẫn được sử dụng bởi một ứng dụng cũ.

một số bảng mới chỉ được sử dụng với EF (ứng dụng mới). có 3 bảng được sử dụng phổ biến. không được tạo nhưng được truy cập qua ef.

Trả lời

21

Với EF 4.3.1 phát hành có được xây dựng trong hỗ trợ cho kịch bản này. Khi thêm các lớp được ánh xạ tới các bảng hiện có trong cơ sở dữ liệu, hãy sử dụng công tắc -IngoreChanges để Add-Migration.

Điều này sẽ tạo ra một di chuyển trống, với một chữ ký siêu dữ liệu cập nhật có chứa các lớp mới được thêm vào.

Thông thường này được thực hiện khi bắt đầu sử dụng EF Migrations, vì thế mà "InitialMigration" và tên:

Add-Migration InitialMigration –IgnoreChanges 
+0

điều này là tuyệt vời, làm việc cho tôi. –

+0

Tôi không hiểu câu trả lời này cách chỉ định tên lớp để bỏ qua. –

+0

Tôi không biết làm thế nào điều này có thể làm việc khi chúng tôi chỉ muốn bỏ qua một bảng cụ thể (tức là một bảng hiện có để bỏ qua di chuyển). modelBuilder.Ignore (); không có ý nghĩa bởi vì chúng ta muốn sự ràng buộc. – Spock

3

Luồng công việc chính xác trong trường hợp này là tạo lần di chuyển đầu tiên trước khi thêm thay đổi (lớp mới), thay vì thêm lớp mới và sau đó tạo di chuyển mới nơi bạn sẽ chỉ có bảng mới.

Nếu bạn không sử dụng di chuyển cho đến nay, khung công tác sẽ tạo di chuyển cho tất cả các bảng bạn có trong dự án vì nó tin rằng bạn đang tạo di chuyển ban đầu. Khi bạn đã tạo di chuyển, bạn có thể sửa đổi tệp nguồn và xóa mã CreateTable cho các lớp cũ từ phương thức Up. Vấn đề là bạn có thể sẽ phải làm điều này trong bất kỳ di chuyển tiếp theo nào.

Edit: Tôi đã viết một walkthrough để thêm di cư đối với dự án hiện có với EF 4.3.1

+0

Các bảng sẽ được đưa vào các siêu dữ liệu cho việc di chuyển đó, vì vậy họ sẽ không xuất hiện trở lại trong cuộc di cư sau này. –

+1

@AndersAbel: Có. Đung. Tôi đã sửa lại câu trả lời của mình. –

+0

Điều này có hoạt động với AutomaticMigrationEnabled = true không? – Spock

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