Приложение на базе Entity Frameowrk не может открыть локальную БД (.mdf) после подключения и отсоединения от SSMS - PullRequest
0 голосов
/ 08 мая 2019

Я разрабатываю приложение C # WinForm на основе Entity Framework 6.
Приложение создает БД, если она не существует, и работает нормально, сохраняя и извлекая данные.
Проблема заключается в том, что каждый раз, когда я присоединяюDB для SSMS и отсоединения его (проверка флажка для закрытия каждого соединения), приложение больше не может использовать этот файл .mdf.
Он выбрасывает System.Data.SqlClient.SqlException:

Не удается создать файл 'потому что он уже существует.Измените путь к файлу или имя файла и повторите операцию.СОЗДАТЬ БАЗУ ДАННЫХ не удалось.Некоторые имена файлов не могут быть созданы.Проверьте связанные ошибки.

Я могу воспроизвести это поведение с помощью следующих шагов:

  • запустить приложение, .mdf создан;
  • закрыть приложение;
  • прикрепить mdf к SSMS;
  • отключить мдф.

Почему приложение не может открываться и использовать .mdf после подключения и отключения от SSMS?Как я могу это исправить?

Единственное, что я заметил, это то, что права ACL для .mdf и .ldf полностью изменены и наследование отключено.Я попытался клонировать ACL с помощью PowerShell, но хотя действие клонирования работает правильно, приложение не может открыть базу данных.

Решение: Я наконец-то смог понять, что происходит!
При попытке подключиться к БД с помощью Visual Studio Server Explorer я получил эту ошибку: ...cannot be opened because it is version 869. This server supports version 852 and earlier. A downgrade path is not supported.
Таким образом, при присоединении БД, созданной в более старой версии MSSQLLocalDB к SSMS 2017, БД выполняет автоматическое обновление (я не могу найти там ни одного флага, чтобы не обновлять).

Поиск этого приведет к этой статье .

Мне удалось все решить, установив SQL Server 2017 Express LocalDB и заново создав экземпляр LocalDB, как показано в статье:

  • установить только Sql Server 2017 Express LocalDB;
  • остановить экземпляр: sqllocaldb stop MSSQLLocalDB
  • удалить экземпляр: sqllocaldb delete MSSQLLocalDB
  • создать новый экземпляр: sqllocaldb create MSSQLLocalDB
  • запустить экземпляр:sqllocaldb start MSSQLLocalDB

Все работают сейчас.

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

Решение: Я наконец-то смог понять, что происходит!
При попытке подключиться к БД с помощью Visual Studio Server Explorer я получил эту ошибку: ...cannot be opened because it is version 869. This server supports version 852 and earlier. A downgrade path is not supported.
Так что в основном присоединениеБД, созданная с помощью более старой версии MSSQLLocalDB до SSMS 2017, обновляет БД в автоматическом режиме (я не могу найти там ни одного флага, чтобы не обновлять).

Поиск его приведет к поиску этой статьи .

Мне удалось все решить, установив SQL Server 2017 Express LocalDB и заново создав экземпляр LocalDB, как показано в статье:

  • установить только Sql Server 2017 Express LocalDB;
  • остановить экземпляр: sqllocaldb stop MSSQLLocalDB
  • удалить экземпляр: sqllocaldb delete MSSQLLocalDB
  • создать новый экземпляр: sqllocaldb create MSSQLLocalDB
  • запустить экземпляр:sqllocaldb start MSSQLLocalDB

Все работают сейчас.

0 голосов
/ 08 мая 2019

Попробуйте удалить Исходный каталог -Part в вашей ConnectionString:

Initial Catalog=myApp

Вам нужен только этот атрибут, если БД не существует.

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