2012-12-11 23 views
7

Tôi đang sử dụng di chuyển EF trong ứng dụng của tôi với cơ sở dữ liệu SQL Azure. Nó đã làm việc tốt cho đến khi tôi tự bỏ một bảng trong SQL Azure. Bây giờ khi tôi xuất bản ứng dụng của tôi mà bỏ bảng không được tạo ra trong SQL Azure. Đây là lỗi tôi nhận được.Bảng SQL Azure không được tạo với EF Migrations

Cannot find the object "dbo.TableName" because it does not exist 
or you do not have permissions. 

Tôi cảm thấy mình đã tạo ra một số mâu thuẫn giữa cơ sở dữ liệu và mô hình của mình.

Tôi đang sử dụng Tự động di chuyển.

Trả lời

4

Tại sao bạn xóa bảng để bắt đầu? Bạn có muốn nó được tái tạo không?

Trước khi chúng tôi đi vào các giải pháp phức tạp hơn, bạn đã thử sử dụng tùy chọn -TargetMigration để quay lại quá trình di chuyển ngay trước khi có bảng tạo trong đó? Tôi có một cảm giác bạn sẽ nhận được các lỗi SQL về việc cố gắng xóa một bảng hoặc chỉ mục của fk mà không có ở đó, nhưng nó có giá trị một shot. Bạn có thể làm điều này bằng cách sử dụng lệnh này update-database -TargetMigration YourOldMigration. Điều này sẽ quay trở lại tất cả các di chuyển đã được áp dụng sau khi di chuyển đích của bạn bằng cách chạy các lệnh được tìm thấy trong các phương thức Down() của các tệp di chuyển của bạn. Nếu bạn gặp lỗi SQL, bạn có thể thử sửa đổi nội dung các phương thức Down() để tránh các lỗi. Cẩn thận. Điều này có thể dẫn đến mất dữ liệu. Nếu EF cảnh báo bạn về điều này và bạn không quan tâm. Hãy thử thêm -Force vào cuối lệnh của bạn.

Ngoài ra và bổ sung ....

di cư của bạn không chỉ được tính bằng cách so sánh chương trình db của bạn để dbcontext bạn/mô hình. Nếu bạn mở cơ sở dữ liệu sql azure của bạn trong studio quản lý máy chủ sql, bạn sẽ thấy một bảng có tên là __MigrationHistory. Nó lưu trữ tất cả các di chuyển đã được áp dụng cho db của bạn thông qua di chuyển tự động.

Vui lòng đọc kỹ mọi cách trước khi bắt đầu. Có một số yếu tố mà bạn sẽ muốn xem xét trước khi nhảy vào. Giả sử bạn đã không thao tác điều này, bạn sẽ có thể tìm thấy một hàng cho bộ thay đổi ban đầu đã tạo bảng của bạn. Xóa hàng đó. Bây giờ EF tự động di chuyển sẽ nghĩ rằng thay đổi đó chưa được áp dụng cho DB của bạn. Nếu bạn chạy cơ sở dữ liệu cập nhật, nó nên thử và chạy lại nó.

Nếu bạn có các thay đổi khác trong tệp di chuyển đó, nó sẽ thử và chạy lại chúng. Điều này có thể gây ra tất cả các loại lỗi sql. Có thể bạn sẽ muốn tự quay lại tất cả các thay đổi cũng là một phần của quá trình di chuyển đó. Lo lắng về mất dữ liệu? Thử sao chép dữ liệu vào bảng được tạo theo cách thủ công để lưu trữ cho đến khi bạn hoàn tất. Sau khi bạn nhận được di chuyển để làm việc, bạn có thể sao chép dữ liệu trở lại vào bảng/cột mới của bạn.

Thay thế đôi. Nếu bạn không quá phát triển và bạn không có quá nhiều lo ngại về việc mất dữ liệu, có thể dễ dàng thả toàn bộ cơ sở dữ liệu và cho phép di chuyển tự động tạo lại từ đầu.

Hy vọng sẽ giúp bạn ở đó

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