EF5: не удается прикрепить файл '{0}' в качестве базы данных '{1}'

Я столкнулся с точной проблемой, описанной здесь здесь (раздел "Не удается подключиться к удаленному файлу MDF" ), но решение для проблема там не указана...

Короче говоря, проблема заключается в том, что после удаления файла .mdf возникает следующее исключение, когда я пытаюсь получить доступ к БД с помощью EF 5.0.

DataException- > EntityException- > SqlException:
Невозможно прикрепить файл '{0}' в качестве базы данных '{1}'

Я удалил файл DB, и теперь я получаю это неприятное сообщение об ошибке при запуске приложения, ожидая его использования инициализатора. Любой способ исправить это?

Ответ 1

Если вы удаляете файл DB, он все равно остается зарегистрированным в SqlLocalDB. Иногда он исправляет это, чтобы удалить БД. Вы можете сделать это из командной строки.

  • Откройте "Команда разработчика Propmpt для VisualStudio" в меню "Пуск/Программы".
  • Выполните следующие команды:

    sqllocaldb.exe stop v11.0

    sqllocaldb.exe delete v11.0

Ответ 2

Для тех, кто все еще ищет решение...

Перейдите в View/SQL Server Object Explorer и удалите базу данных из подноса (localdb)\v11.0!
enter image description here

Существует, по существу, локальная база данных, где хранятся файлы, и если вы хотите удалить файлы базы данных, убедитесь, что вы удалили их из этой утилиты explorer, а не вручную.

Ответ 3

Сначала я попытался использовать решение JSobell, но не видел, чтобы моя база данных была там. Я выполнил команды CodingWithSpike из командной строки VS Developer Command, но это тоже не сработало. Наконец, я запускал 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.

Ответ 4

Хорошо.

Мое решение было простым, я изменил его на локальный сервер:

Я изменил атрибут DataSource в строке подключения:

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

To:

Data Source=.\SQLEXPRESS;blah

Другим решением является вход в LocalDb через SQL Management Studio и попытка удалить эту базу данных:

enter image description here

Однако это не сработало для меня, когда я пытаюсь удалить его, он говорит: "TITLE: Microsoft SQL Server Management Studio

База данных '{0}' не существует на сервере. (SqlManagerUI)

Когда я пытаюсь отделить его, база данных не отображается в списке для отладки выбора, "В автономном режиме" также приводит меня к ошибке выше.

Это заставляет меня думать, что это сплошная ошибка в LocalDB.

Ответ 5

Самое простое исправить - просто изменить имя вашей БД в строке подключения. См. Блог Rowan Millers Как удалить базу данных из Visual Studio 2012 для альтернативных решений. Мы надеемся решить эту проблему в будущем издании.

Ответ 6

Лучший и легкий ответ, который я только что решил сейчас, Просто используйте имя сервера sq sqr в качестве источника данных, исходный каталог - ваше имя базы данных, и вы удалите строку mdf

Ответ 7

В моем случае я использую миграции, а в config я просто изменил имя класса dataContext и dataContext (просто переименовал), затем повторите попытку, и это помогло

Ответ 8

Для SQL 2014, пожалуйста, следуйте выбранному ответу CodingWithSpike и этому комментарию

В качестве примечания, v11.0 специфичен для SQL LocalDB 2012. Если вы используя LocalDB 2014, MS переименовала его в MSSqlLocalDb. - CodingWithSpike 29 августа 14 в 19:20

Ответ 9

У меня была та же проблема, и я решил ее вручную, установив папку "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" />

Ответ 10

Я мог бы исправить это, переименовав имя DataBase в мое соединение String, начиная с по умолчанию aspnet- {numbers} до простого имени, он работал.

Ответ 11

Подключитесь к (LocalDb)\v11.0, используя студию управления сервером Sql, удалите db, а затем выполните обновление базы данных в консоли диспетчера пакетов.