Невозможно прикрепить файл *.mdf как базу данных

В основном я следил за учебником и решил удалить файл .mdf впоследствии.

Теперь, когда я пытаюсь запустить приложение, я получаю следующую ошибку (заголовок этого потока). Код, где я получаю ошибку, показан ниже (ASP.NET MVC 4):

OdeToFoodDB db = new OdeToFoodDB();

public ActionResult Index()
{
    var model = db.Restaurants.ToList();
    return View(model);
}

Моя строка подключения следующая:

<add name="DefaultConnection" 
     connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=OdeToFoodDb;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\OdeToFoodDb.mdf" 
     providerName="System.Data.SqlClient" />

Я пробовал посмотреть на Обозреватель объектов SQL Server, но он выглядит следующим образом:

Кроме того, в Server Explorer я не вижу никаких соединений с данными.

И когда я пытаюсь добавить новое соединение в Server Explorer, я не вижу никаких баз данных с именем OdeToFoodDb.

Извините за этот широкий вопрос, но я новичок в Entity Framework и не совсем понимаю, что здесь не так.

Ответ 1

Взгляните на это: Entity Framework не создает базу данных

Я бы попытался предоставить базе данных другое название. Иногда вы можете столкнуться с проблемами с SQL Express при попытке создать базу данных с тем же именем во второй раз. Есть способ исправить это, используя SQL Server Management Studio, но это обычно проще просто использовать другое имя базы данных.

Edit Этот ответ был принят, поскольку он подтверждает ошибку и обходной путь, используемый OP (переименование базы данных может помочь). Я полностью согласен с тем, что переименование базы данных на самом деле не является приемлемым способом, а не полностью решает проблему. К сожалению, я не проверял другие способы решения этой проблемы в SSMS.

Ответ 2

Я думаю, что для SQL Server Local Db вы не должны использовать свойство Initial Catalog. Я предлагаю использовать:

<add name="DefaultConnection" 
     connectionString="Data Source=(LocalDb)\v11.0;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\OdeToFoodDb.mdf" 
     providerName="System.Data.SqlClient" />

Я думаю, что локальный db не поддерживает несколько баз данных в одном файле mdf, поэтому указать, что начальный каталог не поддерживается (или не поддерживается хорошо, и у меня есть некоторые странные ошибки).

Ответ 3

  • Запустите консоль диспетчера пакетов:

    sqllocaldb.exe stop v11.0

    sqllocaldb.exe delete v11.0

  • Запустите проект

  • Зарегистрировать пользователя

Ответ 4

Удалите эту строку из строки подключения, которая должна это сделать;) "AttachDbFilename = | DataDirectory | whateverurdatabasenameis-xxxxxxxxxx.mdf"

Ответ 5

Я столкнулся с той же проблемой. Следующие шаги в VS 2013 решили для меня проблему:

  • В проводнике сервера добавьте новое подключение к базе данных
  • Выберите файл базы данных Microsoft SQL Server в качестве источника данных
  • Выберите имя файла базы данных, так как оно должно быть в соответствии со строкой подключения в вашем веб файле
  • Был создан новый файл базы данных, и в Server Explorer появилось два подключения к базе данных: "MyDatabaseName" и "MyDatabaseName (MyProjectName)"
  • Удалить одно соединение (я удалил "MyDatabaseName" )

Ответ 6

"Не удается подключить файл 'C:\Github\TestService\TestService\App_data\TestService.mdf" в качестве базы данных' TestService '

Когда вы встретите вышеуказанное сообщение об ошибке, выполните следующие действия.

  • Откройте обозреватель объектов SQL Server
  • Нажмите кнопку обновления.
  • Развернуть (localdb)\MSSQLLocalDB (SQL Server 12.x.xxxxx - xxxxx\xxxx)
  • Развернуть базу данных
  • Удалите существующую базу данных с именем.
  • Нажмите правую кнопку, а затем удалите
  • Вернитесь в консоль управления пакетами
  • Update-Database

Ответ 7

В соответствии с @davide-icardi удалите "Initial Catalog = xxx;" от web.config, но также проверьте, чтобы ваш файл профиля azure публиковал его и здесь:
[Путь YourAspNetProject]\Свойства\PublishProfiles [YourAspNetProjectName].pubxml

<PublishDatabaseSettings>
  <Objects xmlns="">
    <ObjectGroup Name="YourAspNetProjectName" Order="1" Enabled="True">
      <Destination Path="Data Source=AzureDataBaseServer;Initial Catalog=azureDatabase_db;User [email protected];Password=test" />
      <Object Type="DbCodeFirst">
        <Source Path="DBMigration" DbContext="YourAspNetProjectName.Models.ApplicationDbContext, YourAspNetProjectName" MigrationConfiguration="YourAspNetProjectName.Migrations.Configuration, YourAspNetProjectName" Origin="Configuration" />
      </Object>
    </ObjectGroup>
  </Objects>
</PublishDatabaseSettings>

Ответ 8

Я обнаружил, что комментирование контекстного раздела, используемого для инициализации базы данных, разрешило проблему. Havnt успел выяснить, что было не так с заявлениями о посеве, но удаление посевного материала разрешило проблему.

Ответ 9

У вас уже есть старая копия этой базы данных, установленная в Server Explorer. Таким образом, это простое столкновение имен в Server Explorer/SQL Server. Вероятно, вы создали ту же самую базу данных, что и имя Каталога, прежде чем решили перенести ее в папку Apps_Data. Так что имя базы данных уже существует и просто нужно удалить.

Просто зайдите в Visual Studio > View > SQL Server Object Explorer и удалите старое имя базы данных и ее соединение. Повторите попытку снова, и он должен установить файл .mdf в App_Data и снова создать ту же самую точную базу данных в Server Explorer.

Ответ 10

У меня была такая же ошибка, следуя учебному руководству "Начало работы с ASP.NET MVC 5 | Microsoft Docs". Я был на Visual Studio 2015. Я открыл View- > SQL Server Object Explorer и удалил базу данных, названную после учебника, и тогда она может работать. см. Удалить файл .mdf из app_data вызывает исключение не может прикреплять файл как базу данных

Ответ 11

Создайте новую базу данных. Не удаляйте его, и ваше приложение должно продолжать работать.

Ответ 12

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

Совершенно работающий проект (почти) всегда создает базу данных (включая файлы) автоматически. Это может быть любая команда, чтение, запись, обновление. Файлы создаются. Конечно, он использует

DropCreateDatabaseIfModelChanges

Есть только один случай, когда он беспокоится: если mdf автоматически создается, и вы удаляете файл mdf и log. Тогда это было об этом. Попрощайтесь с вашим автообновлением...

Единственный способ, который я нашел, чтобы исправить это, был упомянут:

sqllocaldb stop v11.0 & sqllocaldb delete v11.0

После этого все возвращается в нормальное состояние (и все остальные базы данных, обработанные LocalDB, также ушли!).

EDIT: Это было неверно. Я просто попробовал, и v11.0 автоматически воссоздается, и все mdfs остаются доступными. Я не пробовал "LocalDBs с нефайловыми базами".

Сбивая с толку, я также получил эту ошибку, если что-то еще не так. Поэтому я хочу сказать, что если вы хотите, чтобы ваш DB-Setup был прочным и прочным: Создайте новое решение/проект с нуля, используйте самые базовые команды БД (добавьте сущность, покажите все сущности, удалите все сущности) и посмотрите, работает ли она.

Если ДА, проблема находится где-то в пучине конфигурации VS2013 и версиях, а также nuget и т.д.

ЕСЛИ НЕТ, у вас возникла проблема с установкой LocalDB.

Для тех, кто действительно хочет понять, что происходит в EF (и я все еще не уверен, что я делаю:-)) http://odetocode.com/Blogs/scott/archive/2012/08/14/a-troubleshooting-guide-for-entity-framework-connections-amp-migrations.aspx

P.S.: Поднимите меня, если вам нужен проект проекта.

Ответ 13

Исправить это с помощью SQL Server Management Studio

Ваша проблема: Вы получаете сообщение об ошибке "Не можете прикреплять файл" YourDB.mdf "к базе данных" YourConnStringNamedContext ";

Причина: происходит потому, что вы удалили файлы поддержки .mdf, ldf без фактического удаления базы данных в запущенном экземпляре SqlLocalDb; повторное выполнение кода в VS не поможет, потому что вы не можете повторно создать БД с тем же именем (и поэтому переименование работает, но оставляет старое имя phantom db).

Исправление: Я использую VS2012, аналогично использую для другой версии.

Перейдите к следующему пути и введите

c:\program files\microsoft sql server\110\Tools\Binn > sqllocaldb info

Над cmd показаны имена экземпляров, включая 'v11.0'

Если экземпляр уже запущен, введите в командной строке

sqllocaldb info v11.0

Обратите внимание на следующую информацию   Владелец: YourPCName\Username,   Состояние: Бег,   Имя экземпляра: np: \.\Pipe\LOCALDB # 12345678\tsql\query,  где 123456789 - это некоторая случайная буквенно-цифровая

Если состояние не запущено или остановлено, запустите экземпляр с помощью

sqllocaldb start v11.0

и извлеките ту же информацию, что и выше.

В диалоговом окне "Подключение" панели управления SS введите

имя сервера: np: \.\pipe\LOCALDB # 12345678\tsql\query

auth: Windows auth

имя пользователя: (то же, что и у владельца, оно выделено серым цветом для Win. auth.)

После подключения найдите phantom DB, который вы удалили (например, YourDB.mdf должен был создать db с именем YourDB) и действительно удалить его.

Готово! Как только это уйдет, VS EF не будет иметь проблем с повторным созданием.

Ответ 14

Как ни странно, для той же самой проблемы, что помогло мне, было изменение "to" v11.0 "в следующем разделе конфигурации.

<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>

Ответ 15

Недавно я столкнулся с той же проблемой. Вот одно, что нужно проверить. в визуальной студии есть три места, которые мы должны проверить и удалить базу данных.

1. Solution Explorer App_Data folder
2. Server Explorer Data Connection menu
3. SQL Server Object Explorer

Когда я удаляю базу данных из первых двух точек, ошибка все равно возникает. Итак, мне нужно было удалить базу данных из Обозревателя объектов SQL Server. Тогда я мог бы легко запустить команду "update-database" без ошибок. Надеюсь это поможет.