EF5: Невозможно прикрепить файл '{0}' в качестве базы данных '{1}'
Я сталкиваюсь с точной проблемой, как описано здесь (см. Раздел "Невозможно прикрепить к удаленному файлу MDF"), но решение проблемы там не указано...
Короче говоря, проблема в том, что после удаления .mdf
файл, следующее исключение выдается, когда я пытаюсь получить доступ к БД с помощью EF 5.0.
DataException-> EntityException-> SqlException:
Невозможно прикрепить файл '{0}' в качестве базы данных '{1}'
Я удалил файл БД, и теперь я получаю это неприятное сообщение об ошибке при запуске приложения, ожидающего, что оно будет использовать его инициализатор. Есть ли способ это исправить?
12 ответов
Если вы удалите файл БД, он все равно останется зарегистрированным в SqlLocalDB. Иногда это исправляет, чтобы удалить БД. Вы можете сделать это из командной строки.
- Откройте "Пропуск команды разработчика для VisualStudio" в меню "Пуск" / "Программы".
Запустите следующие команды:
sqllocaldb.exe stop v11.0
sqllocaldb.exe delete v11.0
Для тех, кто все еще ищет решение...
Перейдите в View / SQL Server Object Explorer и удалите базу данных из подузла (localdb)\v11.0!
По сути, существует локальная база данных, в которой хранятся файлы, и если вы хотите удалить файлы базы данных, убедитесь, что вы удалили их из этой утилиты проводника, а не вручную.
Сначала я попробовал решение JSobell, но не увидел там свою базу данных. Я запускал команды CodingWithSpike из командной строки VS Developer, но это тоже не сработало. Наконец я запустил те же команды CodingWithSpike из консоли диспетчера пакетов, и это сработало.
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.
Хорошо.
Мое решение было простым, я перешел на локальный сервер:
Я изменил DataSource
атрибут в строке подключения из:
Data Source=(LocalDb)\v11.0;blah
Для того, чтобы:
Data Source=.\SQLEXPRESS;blah
Другое решение - войти в LocalDb через SQL Management Studio и попытаться удалить эту базу данных:
Однако это не сработало для меня, когда я пытаюсь удалить его, он говорит: "НАЗВАНИЕ: Microsoft SQL Server Management Studio
База данных "{0}" не существует на сервере. (SqlManagerUI)
Когда я пытаюсь отсоединить его, база данных не появляется в списке для выбора отсоединения, "Отключить" также приводит меня к ошибке выше.
Что заставляет меня думать, что это серьезная ошибка в LocalDB.
Самый простой способ - просто изменить имя вашей БД в строке подключения. См. Блог Роуэн Миллерс " Как удалить базу данных из Visual Studio 2012" для поиска альтернативных решений. Мы надеемся исправить эту проблему в следующем выпуске.
Лучший и простой ответ, который я только что решил, просто используйте имя сервера sql ur в качестве источника данных, начальный каталог будет именем вашей базы данных, и вы удалите строку mdf.
В моем случае я использую миграции и в конфигурации я просто изменил имя dataContext и сам класс dataContext (просто переименовать), затем повторите попытку, и это помогло
Для SQL 2014, пожалуйста, следуйте CodingWithSpike выбранный ответ и этот комментарий
Как примечание, v11.0 специфичен для SQL LocalDB 2012. Если вы используете LocalDB 2014, MS переименовала его в MSSqlLocalDb. - CodingWithSpike 29 августа '14 в 19:20
У меня такая же проблема. Я выполнил следующие команды в консоли диспетчера пакетов, и это устранило проблему
sqllocaldb.exe stop MSSqlLocalDb
sqllocaldb.exe delete MSSqlLocalDb
У меня была та же проблема, и я решил ее, вручную установив папку "DataDirectory" в другую папку в двоичных файлах моего приложения.
Я поместил эту строку в метод Global.asax Application_Start:
AppDomain.CurrentDomain.SetData("DataDirectory", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App_Data"));
Моя строка подключения в настоящее время настроена на это:
<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" />
Я мог бы исправить это, переименовав имя базы данных в моей строке подключения, из aspnet-{numbers} по умолчанию в простое имя, это сработало.
Подключитесь к (LocalDb)\v11.0 с помощью Sql server management studio, удалите базу данных и затем выполните update-database в консоли диспетчера пакетов.