Невозможно воссоздать базу данных SQL Server Express с помощью Entity Framework Code First и MVC 3 без изменения имени базы данных. - PullRequest
5 голосов
/ 16 января 2011

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

<add name="ConnString1"
     connectionString="Data Source=.\SQLEXPRESS;
                       Database=Database1;
                       Integrated Security=SSPI;
                       AttachDBFilename=|DataDirectory|aspnetdb.mdf;
                       User Instance=true"
     providerName="System.Data.SqlClient" />

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

Основной провайдер не удалось открыть.
{"Невозможно открыть базу данных \" Database1 \ ", запрошенную при входе в систему. Ошибка при входе в систему. \ Database1 \ nLogin не удалось для пользователя 'computer \\ someuser'."}

Если я изменю База данных = База данных1 на База данных = База данных2 в строке подключения, файл базы данных будет успешно создан. Проблема повторяется всегда.

Как я могу воссоздать файл базы данных без необходимости менять имя базы данных?

Ответы [ 2 ]

1 голос
/ 03 августа 2011

Убедитесь, что права доступа к каталогу позволяют вам удалить файл mdf, а учетная запись имеет привилегии схемы / таблицы. Права доступа к каталогам являются распространенной проблемой для файлов mdf из-за высокой степени защиты этих файлов из-за их потенциально чувствительной природы.

0 голосов
/ 30 марта 2013

Я вижу, что это более старая статья - надеюсь, это поможет кому-то в том же положении.

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

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

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

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

...