Почему Entity Framework пытается создать уже существующую базу данных? - PullRequest
0 голосов
/ 13 июня 2019

В моем файле Services и WebSite Web.config есть следующая строка подключения:

<connectionStrings>
  <add name="MyDBConnect" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;Initial Catalog=MyDB;User Id=tester;Password=abc123*123;" providerName="System.Data.SqlClient" />
</connectionStrings>

Я вручную запустил сценарий построения базы данных и подтвердил в интерфейсе SSMS: (LocalDB) \ MSSQLLocalDB (SQL Server 13.0.40001 - 8Protons)> Базы данных> MyDB

При запуске проекта и переходе на экран входа в систему выдается исключение:

var entity = GetAll().Include(p => p.Role).FirstOrDefault(p => p.Email == userName && p.Password == encryptedPassword && p.IsActive);

со следующим сообщением

Исключение типа 'System.Data.SqlClient.SqlException' произошло в EntityFramework.dll, но не был обработан в пользовательском коде. Дополнительно информация: в базе данных «MyDB» отказано в разрешении CREATE TABLE.

Почему решение пытается СОЗДАТЬ таблицу, когда она уже существует? Поэтому я пошел к таблице SSMS и повысил права этого пользователя для создания таблицы. Теперь выдается ошибка:

Исключение типа 'System.Data.SqlClient.SqlException' произошло в EntityFramework.dll, но не был обработан в пользовательском коде. Дополнительно информация: уже есть объект с именем «MyTable» в базы данных.

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

1 Ответ

0 голосов
/ 13 июня 2019

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

public MyDBContext(string nameOrConnectionString)
    : base(nameOrConnectionString)
{
    this.Configuration.LazyLoadingEnabled = false;
    this.Configuration.ProxyCreationEnabled = false;
    this.Database.CommandTimeout = 60;

    IDatabaseInitializerCreator creator = new DatabaseInitializerCreator();
    Database.SetInitializer(creator.Create());
}

Последние две строки обеспечат создание базы данных и ее таблиц, если они еще не существуют и точно совпадают с существующими.

...