EF5: Không thể đính kèm tệp '{0}' làm cơ sở dữ liệu '{1}'


140

Tôi đang gặp phải vấn đề chính xác như được mô tả ở đây (đọc phần "Không thể đính kèm tệp đã xóa"), nhưng giải pháp cho vấn đề không được nói ở đó ...

Tóm lại, vấn đề là sau khi xóa .mdftệp, ngoại lệ sau được đưa ra khi tôi cố gắng truy cập DB bằng cách sử dụng EF 5.0.

DataException-> EntityException-> SqlException:
Không thể đính kèm tệp '{0}' làm cơ sở dữ liệu '{1}'

Tôi đã xóa tệp DB và bây giờ tôi nhận được thông báo lỗi khó chịu đó khi chạy ứng dụng mong muốn nó sử dụng trình khởi tạo. Bất kỳ cách nào để khắc phục điều này?


1
Xin lỗi tôi không cung cấp câu trả lời cụ thể, nhưng tại thời điểm đó tôi không có giải pháp nào hiệu quả 100%. Tôi cố gắng tránh lỗi bây giờ bằng cách không sử dụng cơ sở dữ liệu người dùng đính kèm. Tôi thường có thể sửa lỗi bằng cách kết nối với SQL Server Management Studio và tách cơ sở dữ liệu trong lỗi.
OdeToCode

Vấn đề là cơ sở dữ liệu không còn tồn tại nữa vì tôi đã xóa tệp vật lý. Tôi thực sự đã cố gắng chăm sóc nó trong một trong những hãng phim (được tích hợp trong VS và bên ngoài). Câu trả lời của tôi thực sự không phải là một giải pháp mà là một cách giải quyết, nó chỉ nói rằng bạn không cần phải dính vào LocalDb.
Shimmy Weitzhandler

Từ chuyên gia của Rowan Miller - xem romiller.com/2013/05/17/NH Chúng tôi hy vọng sẽ cung cấp các giải pháp tốt hơn trong phiên bản VS tiếp theo.
RickAndMSFT

Hướng dẫn xử lý sự cố hữu ích: odetocode.com/bloss/scott/archive/2012/08/15/15
Tim Abell

Câu trả lời:


220

Nếu bạn xóa tệp DB, nó vẫn được đăng ký với SqlLocalDB. Đôi khi nó sửa nó để xóa DB. Bạn có thể làm điều này từ dòng lệnh.

  1. Mở "Propmpt Command Developer cho VisualStudio" trong menu start / chương trình của bạn.
  2. Chạy các lệnh sau:

    sqllocaldb.exe stop v11.0

    sqllocaldb.exe delete v11.0


1
Tôi không tìm thấy Sql Server Object Explorer, tôi đoán vì tôi đang sử dụng VS 2012 Express. Vì vậy, tôi không thể thử câu trả lời được chấp nhận. Tuy nhiên, câu trả lời của bạn đã làm việc cho tôi một cách hoàn hảo. Cảm ơn.
newman

3
Câu trả lời của bạn chỉ cứu tôi. Tôi không có mã con (localdb) \ v11.0 từ câu trả lời được chấp nhận và tôi không thể xóa các tham chiếu khỏi SQL Management Studio, vì vậy hãy ủng hộ bạn!
Santux

18
Điều này làm việc cho tôi sau khi xóa các tập tin. Bạn cũng có thể chạy các lệnh từ Công cụ -> Trình quản lý gói thư viện -> Bảng điều khiển quản lý gói.
Bart Verkoeijen

11
Là một lưu ý phụ, v11.0cụ thể là SQL LocalDB 2012. Nếu bạn đang sử dụng LocalDB 2014, MS đã đổi tên nó thành MSSqlLocalDbthay thế.
Mã hóaWithSpike

4
liên quan đến nhận xét trên, bạn cũng không thể nhập bất kỳ tên db nào và nó sẽ chỉ áp dụng cho tên mặc định của bạn, tôi đã sử dụng bên dưới với vs2015 và nó đã hoạt động: sqllocaldb.exe dừng xóa
sqllocaldb.exe

147

Đối với những người vẫn đang tìm kiếm một giải pháp ...

Đi đến View / SQL Server Object Explorer và xóa cơ sở dữ liệu khỏi mã con (localdb) \ v11.0!
nhập mô tả hình ảnh ở đây

Về cơ bản, có một cơ sở dữ liệu cục bộ được giữ lại nơi chứa các tệp và nếu bạn muốn xóa các tệp cơ sở dữ liệu, hãy đảm bảo bạn xóa chúng khỏi tiện ích thám hiểm này, chứ không phải thủ công.


điều này một lần cho tôi một lần, lần thứ hai là tôi đã tự động di chuyển == FML sai
workabyte

8
Ngoài ra, nếu bạn không nhìn thấy nó. Chỉ cần thêm một kết nối mới và nhập "(localdb) \ v11.0" (với Windows Auth). Nó có vẻ đơn giản, nhưng tôi đã nhìn chằm chằm vào màn hình của mình một lúc ở đó. :)
Peter

@Peter Ok, Đã thêm cơ sở dữ liệu và bây giờ tôi thấy 2 bối cảnh của mình. Khi tôi xóa khỏi chế độ xem này, tôi gặp một lỗi mới: 'không thể truy xuất cấp truy cập dữ liệu cho cơ sở dữ liệu này'. Tôi đã có thể khắc phục điều này bằng cách sử dụng dấu nhắc lệnh.
nVentimiglia

1
Khi sử dụng nhà máy kết nối mặc định của EF6, bạn có thể đang sử dụng mssqllocaldb. Thay đổi máy chủ thành (LocalDb) \ mssqllocaldb và xem nếu kết nối. Có một số phiên bản LocalDb và một phiên bản không hiển thị cho bạn tất cả.
Jim Yarbro 6/2/2015

Ngoài ra, những gì tôi đã trải nghiệm: Nhấp vào ngắt kết nối và sau đó kết nối lại nếu bạn không thấy cơ sở dữ liệu của mình nữa. (Làm mới không giúp được gì)
StefanG

19

Tôi đã thử giải pháp của JSobell trước nhưng không thấy cơ sở dữ liệu của tôi được liệt kê ở đó. Tôi đã chạy các lệnh của CodingWithSpike từ Dấu nhắc lệnh của nhà phát triển VS, nhưng điều đó cũng không hoạt động. Cuối cùng tôi đã chạy các lệnh tương tự của CodingWithSpike từ Gói quản lý gói và nó đã hoạt động.

    PM> sqllocaldb.exe stop v11.0
    LocalDB instance "v11.0" stopped.

    PM> 
    PM> sqllocaldb.exe delete v11.0
    LocalDB instance "v11.0" deleted.

    PM> sqllocaldb.exe start v11.0
    LocalDB instance "v11.0" started.

9

Ổn thỏa.

Giải pháp của tôi rất đơn giản, tôi đã thay đổi để sử dụng máy chủ cục bộ:

Tôi đã thay đổi DataSourcethuộc tính trong chuỗi kết nối từ:

Data Source=(LocalDb)\v11.0;blah

Đến:

Data Source=.\SQLEXPRESS;blah

Một giải pháp khác là đăng nhập vào LocalDb thông qua SQL Management Studio và cố gắng xóa cơ sở dữ liệu đó:

nhập mô tả hình ảnh ở đây

Tuy nhiên, nó không hoạt động với tôi, khi tôi cố xóa nó, nó nói "TITLE: Microsoft SQL Server Management Studio

Cơ sở dữ liệu '{0}' không tồn tại trên máy chủ. (SqlManagerUI)

Khi tôi cố gắng tách nó, cơ sở dữ liệu không xuất hiện trong danh sách để chọn tách, "Đưa ra ngoại tuyến" cũng đưa tôi đến lỗi ở trên.

Điều này dẫn đến tôi nghĩ rằng đây là một lỗi nghiêm trọng trong LocalDB.


Tôi gặp vấn đề khi cố gắng sử dụng DB cục bộ với EF5
Nikos

LocalDB có lợi ích là bạn có thể chạy nó trong tài khoản cục bộ của mình mà không cần quyền riêng tư của Quản trị viên, giống như IIS Express. Điều này cho phép chia sẻ các dự án với nhiều nhà phát triển mà không cần thiết lập IIS hoặc SQL Server cho từng người dùng.
Bart Verkoeijen


2

Câu trả lời hay và dễ nhất Tôi vừa giải quyết nó, Chỉ cần sử dụng tên máy chủ ur sql làm nguồn dữ liệu, danh mục ban đầu là tên cơ sở dữ liệu của bạn và ở đó bạn đi xóa dòng mdf


1

Trong trường hợp của tôi, tôi sử dụng di chuyển và trong cấu hình, tôi chỉ cần thay đổi tên của lớp dataContext và dataContext (chỉ đổi tên), sau đó thử lại và điều đó đã giúp


1

Đối với SQL 2014, vui lòng theo dõi CodingWithSpike đã chọn câu trả lời và nhận xét này

Là một lưu ý phụ, v11.0 dành riêng cho SQL LocalDB 2012. Nếu bạn đang sử dụng LocalDB 2014, MS đã đổi tên nó thành MSSqlLocalDb thay thế. - Mã hóaWithSpike ngày 29 tháng 8 năm 14 lúc 19:20


Lưu ý bên hữu ích, tôi bắt gặp điều này làm việc trên một dự án cũ với VS 2015 Thông tin thêm . Cũng có những thay đổi tương tự trong VS 2013 từ v11.0đến ProjectsV12 . Ít nhất là trên máy của tôi :-).
nhắm

0

Tôi đã có cùng một vấn đề và tôi đã giải quyết nó bằng cách đặt thủ công thư mục "DataDirectory" sang một thư mục khác trong các nhị phân ứng dụng của tôi.

Tôi đặt dòng này trong phương thức Global.asax Application_Start:

AppDomain.CurrentDomain.SetData("DataDirectory", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App_Data"));

Chuỗi kết nối của tôi hiện được đặt thành này:

<connectionStrings>
    <add name="DataContext" connectionString="Data Source=(LocalDb)\v11.0; Initial Catalog=DataContext; Integrated Security=True; MultipleActiveResultSets=True; AttachDbFilename=|DataDirectory|DataContext.mdf"
  providerName="System.Data.SqlClient" />


Tôi đã không kiểm tra nó, nhưng điều này có lẽ không hoạt động. bởi vì DataDirectoryđã được đặt thành cục bộ App_Datatheo mặc định, vì vậy trừ khi thay đổi rõ ràng trước đó, mã của bạn không làm gì cả.
Shimmy Weitzhandler

NẾU bạn đi theo cách tiếp cận này, đừng thay đổi thư mục, thay đổi tên tệp MDF. Ngoài ra, xem romiller.com/2013/05/17/ Mạnh
RickAndMSFT

0

Tôi có thể sửa nó bằng cách đổi tên tên DataBase trong Chuỗi kết nối của mình, từ aspnet mặc định- {Numbers} thành một tên đơn giản, nó đã hoạt động.


0

Kết nối với (LocalDb) \ v11.0 bằng studio quản lý máy chủ Sql, xóa db và sau đó thực hiện cập nhật cơ sở dữ liệu trong bảng điều khiển trình quản lý gói.


0

Tôi đã từng gặp vấn đề tương tự. Tôi đã chạy các lệnh sau trong bảng điều khiển trình quản lý gói và nó đã khắc phục sự cố

sqllocaldb.exe stop MSSqlLocalDb

sqllocaldb.exe delete MSSqlLocalDb
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.