Не удается прикрепить файл *.МДФ как база данных



в основном я следовал учебник и решил удалить .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, но он выглядит следующим образом:



кроме того, в Обозревателе серверов я не см. любые подключения к данным.



и когда я пытаюсь добавить новое подключение в Обозревателе серверов я не вижу никаких баз данных с именем OdeToFoodDb.



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

895   20  

20 ответов:

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

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

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

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

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

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

  1. из консоли диспетчера пакетов запустите:

    sqllocaldb.exe stop v11.0

    sqllocaldb.exe delete v11.0

  2. запуск проекта

  3. регистрация пользователя

удалите эту строку из строки подключения, которая должна это сделать ;) "Ключевое слово attachdbfilename=|параметр datadirectory|whateverurdatabasenameis-ХХХХХХХХХХ.МДФ"

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

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

  1. откройте Обозреватель объектов SQL Server
  2. Нажмите кнопку "Обновить".
  3. развернуть (localdb)\MSSQLLocalDB(SQL Server 12.х.ХХХХХ - ХХХХХ\ХХХХ)
  4. Расширить Базу Данных
  5. пожалуйста, удалите существовавшую одноименную базу данных
  6. клик правая кнопка, а затем удалить
  7. вернитесь к консоли управления пакетами
  8. Update-Database

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

  1. в Обозревателе серверов добавить новое подключение к базе данных
  2. Выберите файл базы данных Microsoft SQL Server в качестве источника данных
  3. выбрать имя базы данных, как это должно быть в соответствии с строку подключения в web.конфигурации
  4. был создан новый файл базы данных, и в Обозревателе серверов появились два подключения к базе данных: "MyDatabaseName" и " MyDatabaseName (Имя_моего_проекта)"
  5. удалить одно соединение (я удалил "MyDatabaseName")

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

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

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

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

чтобы исправить это с помощью SQL SERVER Management Studio

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

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

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

перейдите к ниже пути и введите

c:\program файлы\программы\Microsoft SQL-сервер 110 инструменты\\Бинн>в sqllocaldb информация

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

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

sqllocaldb info v11. 0

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

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

sqllocaldb start v11. 0

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

в диалоговом окне SS Management Studio 'Connect' введите

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

auth: Windows auth

имя пользователя: (так же, как владелец, он неактивен для Win. автор.)

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

готово! Как только он исчезнет, VS У EF не должно быть проблем с его воссозданием.

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

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

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

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

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

DropCreateDatabaseIfModelChanges

есть только один случай, когда он становится проблемным: если МДФ создается автоматически и вы удаляете mdf и файл журнала. Значит, вот в чем дело. Попрощайтесь со своим автосозданием...

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

sqllocaldb stop v11.0 & sqllocaldb delete v11.0

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

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

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

Если да, то проблема где-то в бездне VS2013 config и versioning и nuget и прочее.

если нет, у вас есть проблема с вашей LocalDB установка.

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

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

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

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

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

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

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

мы просто столкнулись с этим сами при запуске dotnet ef database update использование ASP.Net ядро 2.1; похоже, что относительные пути не поддерживаются с помощью AttachDbFileName.

System.Data.SqlClient.SqlException (0x80131904): Cannot attach the file '.\OurDbName.mdf' as database 'OurDbName'.

просто хотел выразить это здесь для других людей, которые могут столкнуться с этим. "Исправление" - это использование абсолютных путей.

Смотрите также:https://github.com/aspnet/EntityFrameworkCore/pull/6446

столкнулся с этой проблемой. Вызвано в моем случае путем удаления .МДФ при iispexress по-прежнему работает, и поэтому все еще используя БД. Щелкните правой кнопкой мыши на iisexpress в системном трее и нажмите кнопку Выход, а затем удалите MDF, чтобы предотвратить эту ошибку на самом деле происходит.

чтобы исправить эту ошибку просто в VS щелкните правой кнопкой мыши папку App-Data добавить новый элемент > база данных SQL Server. Имя: [используйте имя базы данных, предоставленное ошибкой update-database] нажать кнопку add.

Если вы уже применяете миграции, это может исправить это.

перейти к вашей веб.конфиг и обновить строку подключения на основе переноса файлов.

Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-GigHub-201802102244201.mdf;Initial Catalog=aspnet-GigHub-201802102244201;

datestrings должны соответствовать первым числам в ваших миграциях.

просто измените имя базы данных от web.уровень проекта конфигурации файл, а затем обновить базу данных.

connectionString = источник данных =(LocalDb)\MSSQLLocalDB;AttachDbFilename=| / DataDirectory / \aspnet-имя проекта-20180413070506.mdf"; Initial Catalog= " aspnet--20180413070506";интегрированное

измените жирную цифру на какое-то другое число:

connectionString = данные Источник==(на localdb)\MSSQLLocalDB;ключевое слово attachdbfilename="|параметр datadirectory|\Паш-название проекта-20180413070507.mdf"; Initial Catalog= " aspnet--20180413070507";интегрированное

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

<add name="DefaultConnection" connectionString="Data Source=.;AttachDbFilename=|DataDirectory|\aspnet-EjournalParsing-20180925054839.mdf;Initial Catalog=aspnet-EjournalParsing-20180925054839;Integrated Security=True"
      providerName="System.Data.SqlClient" />

Comments

    Ничего не найдено.