2012-08-25 39 views
7

Tôi đang trên RTM VS 2012, với EF 5. Tôi đang làm Mã đầu tiên, nhưng cố gắng bỏ qua Mã di cư kể từ khi tôi chỉ đang phát triển. Để tránh chúng, tôi có thiết lập nàyLàm thế nào để làm việc với LocalDB và EF, mà không sử dụng di chuyển

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<SomeContext>()); 

Thỉnh thoảng, tôi không nghĩ rằng tôi đã chạm vào mô hình, nó quyết định tạo lại. Đó là tốt. Nhưng nó thường dẫn đến lỗi

Không thể xóa cơ sở dữ liệu vì nó hiện đang được sử dụng.

Vì vậy, tôi đã quyết định xóa hoàn toàn cơ sở dữ liệu. Tôi đi vào VS, đi đến "SQL Server Object Explorer", tìm DB và xóa nó. Bây giờ tôi đang bị mắc kẹt tại

Không thể đính kèm tập tin '{0}' như cơ sở dữ liệu '{1}'

Tôi có điều này xảy ra đêm qua và tôi chỉ fiddled xung quanh cho đến khi nó hoạt động (đóng các tác vụ xuống, khởi động lại VS, thay đổi tên tệp và tệp DB trong web.config, v.v.

Câu hỏi 1) Làm cách nào để thoát khỏi trạng thái này?

Nhưng câu hỏi quan trọng hơn, làm cách nào để ngăn bản thân mình thoát khỏi trạng thái này?

+0

Tại sao không sử dụng Tự động di chuyển? Bạn có thể thay đổi phương pháp intialization DB bất cứ lúc nào ngay cả từ cấu hình khi bạn triển khai để sản xuất. –

+0

[This] (http://msdn.microsoft.com/en-us/data/jj554735) liệt kê một vài lý do tại sao tôi không muốn sử dụng Tự động di chuyển. Ngoài ra, nó chỉ được bạn cho đến nay cho đến khi bạn cần phải bắt đầu sử dụng Code Based Migrations anyway. –

+0

Tôi đang đối mặt với cùng một vấn đề mà bạn đã tìm ra giải pháp? – Shimmy

Trả lời

5

Tôi đã gặp phải sự cố tương tự và đã cố gắng khắc phục. Vấn đề chính là EF sẽ không tự động tạo cơ sở dữ liệu. Giải pháp không phải là rất khó.

Trước tiên, đi tới Solution Explorer và tạo thủ công cơ sở dữ liệu. Để thực hiện việc này, hãy chuyển đến thư mục chứa cơ sở dữ liệu của bạn (thường là App_Data). Nhấp chuột phải vào thư mục này và nhấp vào Thêm -> Mục mới. Chọn tab Dữ liệu và chọn Cơ sở dữ liệu máy chủ SQL. Đảm bảo bạn nhập tên Entity Framework mong đợi (được chỉ định trong thông báo lỗi Cannot attach the file '{0}' as database '{1}').

Sau đó, rất có thể bạn sẽ nhận được thông báo lỗi cho biết cơ sở dữ liệu không chứa bất kỳ siêu dữ liệu mô hình nào. Để phá vỡ điều này, hãy thay đổi khởi tạo cơ sở dữ liệu của bạn thành:

Database.SetInitializer(new DropCreateDatabaseAlways<SomeContext>()); 

Bây giờ chạy ứng dụng và cơ sở dữ liệu phải có bảng được tạo chính xác. Khi bước này đã được thực hiện thành công, bạn thay đổi thay đổi initializer cơ sở dữ liệu của bạn trở lại:

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<SomeContext>()); 
+2

Cảm ơn thông tin, điều đó rất hữu ích. – Form

+1

Thực sự hữu ích! –

6

Các SQL Server Object Explorer cửa sổ có thể tổ chức một kết nối đến cơ sở dữ liệu. Đóng cửa sổ và tất cả các cửa sổ mở ra từ nó sẽ giải phóng kết nối.

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