Не удается создать базу данных с помощью Code-First

Я использую Visual Studio 2015, Entity Framework v6 и SQL Server 2016 Express. Раньше я создавал базу данных, используя SqlConnection и SqlCommand, и помещал SQL в строку.

Теперь я изучаю EF6 в учебнике по Entity Framework. В простом примере кода (очень простом) я буквально копирую и вставляю свой код, но по-прежнему не вижу базу данных, созданную в SSMS. Мой код также не вызывает никаких ошибок.

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

введите здесь описание изображения

[EDIT] Следуя предложению Sampath, я получаю следующую ошибку: введите здесь описание изображения введите здесь описание изображения

[EDIT - вроде как решено]

Я применяю тот же код к другой машине с такой же настройкой, и код работает. Поэтому я подозреваю, что в SQL Server есть какие-то повреждения или, возможно, какой-то реестр неверен. Я удаляю КАЖДУЮ версию SQL Server и связанные с ней инструменты, вручную удаляю все папки и файлы, а затем заново устанавливаю SQL Server Express 2016 и инструменты. Тогда мой код работает.

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


person KMC    schedule 08.10.2016    source источник
comment
У вас есть локальная установка SQL Server Express? Какая версия?   -  person Jean Hominal    schedule 08.10.2016
comment
SQL Server Express 2016 и SQL Server Management Studio. Пожалуйста, смотрите отредактированный вопрос.   -  person KMC    schedule 08.10.2016
comment
нажмите на исключение [Подробнее] и покажите больше об исключении   -  person Monah    schedule 08.10.2016


Ответы (2)


Вы должны указать имя строки подключения в файле web.config, как показано ниже.

Контекст:

public SchoolContext(): base("MySchoolDB")
        {

        }

Файл App.config

<add name="MySchoolDB" connectionString="Server=localhost; 
Database=YourDBName;Trusted_Connection=True;" providerName="System.Data.SqlClient" />

Вы можете получить более подробную информацию здесь: Инициализация базы данных< /сильный>

person Sampath    schedule 08.10.2016
comment
с этим я оказался в ошибке The Application is in break mode. - person KMC; 08.10.2016
comment
вы должны установить свое имя Database в строке подключения. Я обновил свой пост. - person Sampath; 08.10.2016
comment
или вы можете поделиться информацией о строке подключения? - person Sampath; 08.10.2016
comment
Я поставил ссылку. Пожалуйста, посмотрите это тоже. - person Sampath; 08.10.2016
comment
Спасибо. Но даже у меня есть Database=MySchoolDB, я все равно получаю ту же ошибку. Это не веб-приложение, поэтому у меня есть App.config. Я бы оставил это поле пустым, потому что база данных еще не существует, и код сначала должен создать эту базу данных для меня, не написав ничего явного, как это было упомянуто в учебнике по вашей ссылке. - person KMC; 08.10.2016
comment
Хорошо, вы можете показать это на своем коде? Database.SetInitializer(new CreateDatabaseIfNotExists<Context>()); куда ты это положил ? - person Sampath; 08.10.2016
comment
Я оставил конструктор пустым, так как CreateDatabaseIfNotExists в любом случае используется по умолчанию. Но на самом деле я также пытаюсь поместить это в конструктор DbContext и получаю ту же ошибку... - person KMC; 08.10.2016
comment
затем вы можете создать базу данных на сервере sql, поместить это имя в соединение и посмотреть результат. - person Sampath; 08.10.2016
comment
вам не нужно создавать таблицы. Просто создайте базу данных и посмотрите результат. Мы должны попробовать разные способы, отличные от значения по умолчанию, если вы хотите найти решение. - person Sampath; 08.10.2016
comment
Если у меня нет таблицы и данных, EntityFramework не будет генерировать базу данных - person KMC; 08.10.2016
comment
это поведение по умолчанию. но в вашей настройке это не работает, нет, поэтому просто создайте базу данных и поместите это имя базы данных в свое соединение и посмотрите, генерирует ли ef таблицы для вас или нет. - person Sampath; 08.10.2016
comment
Вроде того, пожалуйста, смотрите последний отредактированный раздел моего вопроса. - person KMC; 09.10.2016

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

<add name="Name" connectionString="Data Source=.; Initial Catalog=yourdbName; Integrated Security=True; MultipleActiveResultSets=True;"
      providerName="System.Data.SqlClient" />
person Omid    schedule 28.02.2019