Entity framework code first не создает базу

Обновлено: 06.07.2024

Я создал строку подключения в файлах web.release.config и web.debug.config. Я не знаю, что еще мне делать. Где я должен поместить свой код DbContext, чтобы таблицы были созданы?

1 ответ

Мы используем Miscrosoft code first entity framework (4.1) для сопоставления с существующей базой данных. Мы хотим иметь возможность изменять типы данных и значения некоторых свойств, которые сопоставляются один к одному с таблицей. Например, в таблице есть столбец, который определяет, является ли.

Если вы не измените поведение по умолчанию, при первом использовании DbContext он создаст вашу базу данных.

Похожие вопросы:

В основном я использую метод Entity Framework Code First. Код, который я написал, работает. Однако я не могу найти вновь созданную базу данных в студии управления SQL Server. - Где он? Что IDE я.

Microsoft выпускает Entity Framework 4.0, и в нем разработчики могут выполнять первую разработку кода. Это прекрасно и благодаря Microsoft. У меня есть одна путаница по поводу разработки кода в.

Мы используем Miscrosoft code first entity framework (4.1) для сопоставления с существующей базой данных. Мы хотим иметь возможность изменять типы данных и значения некоторых свойств, которые.

Я использую подход Code First в своем проекте. Вот мой объект: public class Account < [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public Guid ID < get; set; >public string name < get;set;.

Я пытаюсь использовать code-first в Entity Framework для создания базы данных, но это не работает. Вот моя строка подключения в app.config консольного приложения: <add name=BlogDbContext.

У меня небольшая проблема с базой данных. Я хочу создать базу данных с помощью Entity Framework (code-first), но все учебники, показывающие, как это сделать, делают это в консольном приложении.

Я пытаюсь использовать entity framework с методом code first, но по какой-то причине он не создает для меня базу данных. Я полагаю, что проблема заключается в моем конфигурационном файле app.config.

Я создаю Code First Entity Framework для создания базы данных там, куда я ее указываю. У меня есть экземпляр SQL => DESKTOP-98TG6JE\SQLEXPRESS и еще один => DESKTOP-98TG6JE В моем коде Asp MVC моя.

Я пытаюсь создать новую базу данных, используя первую концепцию кода Entity Framework. Однако при запуске кода база данных не создается (используя параметр DropCreateDatabaseIfModelChanges ), хотя код работает нормально. Я вижу следующее исключение, когда пытаюсь получить что-то из базы данных.

enter image description here

Мой проект настраивается с использованием отдельного слоя DataAccess с общей конструкцией сервиса и хранилища. Таким образом, все мои сущности, репозиторий и контекст базы данных находятся в отдельном проекте в рамках решения.

Мой global.asax файл содержит следующий фрагмент кода.

Это должно инициализировать новую базу данных, если ее нет, правильно?

Мой класс контекста базы данных выглядит следующим образом:

Я создал этот класс, следуя нескольким учебникам и статьям в Интернете. Все это ново для меня, но насколько я вижу, все кажется правильным до сих пор. Итак, теперь два объекта, которые я использую. Их называют "Проект" и "Портфолио". Они выглядят так:

База данных, которую я использую, работает на внешнем сервере, она поставляется с хостинг-провайдером, который я использую. У меня есть база данных SQL Server, и строка подключения к базе данных находится в web.config проекта веб-сайта. Я уже попытался удалить базу данных и позволить ее воссоздать, что, к сожалению, не сработало. Я пропустил что-то очевидное здесь? Или это может быть просто, как права доступа к серверу для создания баз данных?

Примечание. Когда я запускаю команду Database-Update -Script для генерации кода SQL, кажется, что создаются правильные операторы SQL для создания всех таблиц.

ОБНОВЛЕНИЕ 1: Хорошо, благодаря некоторым комментариям я пришел немного дальше. Я добавил два свойства для своих объектов, чтобы внести некоторые изменения, и также создал пользовательский инициализатор, например:

Я также удалил инициализатор из конструктора моего контекста, так что это означает, что я удаляю эту строку кода;

После этого я добавил эти три строки в мой файл Global.asax;

enter image description here

При отладке я получаю это исключение;

Это дает мне следующую информацию:

  • InnerException говорит: поставщик не возвратил ProviderManifestToken
  • InnerException в InnerException говорит: "Для этой операции требуется подключение к базе masterdatabase. Соединение не может быть сделал ширину "основной" базы данных, поскольку исходное соединение и ссылки были удалены из соединения. Предоставьте не открытое соединение "

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

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

ОТВЕТЫ

Ответ 1

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

Сначала я создал базу данных и убедился, что правильный пользователь SQL настроен, и у меня был доступ.

Затем я удалил инициализатор и код из файла Global.asax. После этого я запустил следующую команду в консоли диспетчера пакетов (так как многоуровневый дизайн мне нужно было выбрать правильный проект в консоли);

После того, как миграции были включены, и я внес некоторые изменения в мои последние изменения, я выполнил приведенную ниже команду, чтобы поднять новую миграцию;

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

Чтобы иметь возможность посеять базу данных при выполнении миграции, я переопределил метод Seed в моем классе Configuraton.cs, который был создан при включении миграции. Окончательный код в этом методе выглядит следующим образом:

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

Ответ 2

+1 для подробного вопроса.

Убедитесь, что ваша строка подключения указывает на правильную базу данных и добавляет атрибуты авторизации, подобные этому, для доступа к вашей базе данных:

Ответ 3

befor intialize его запустить следующий код для создания вашей базы данных:

Просмотреть видео

Предварительные требования

для выполнения инструкций этого пошагового руководства необходимо установить по крайней мере Visual Studio 2010 или Visual Studio 2012.

если вы используете Visual Studio 2010, также необходимо установить NuGet .

1. Создание приложения

чтобы не усложнять, мы создадим простое консольное приложение, которое использует Code First для доступа к данным.

2. Создание модели

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

Под определением класса программы в Program. cs добавьте следующие два класса.

Вы заметите, что два свойства навигации (blog. posts и Post.Blog) являются виртуальными. Это включает функцию отложенной загрузки Entity Framework. Отложенная загрузка означает, что содержимое этих свойств будет автоматически загружаться из базы данных при попытке доступа к ним.

3. Создание контекста

Теперь пора определить производный контекст, который представляет сеанс с базой данных, что позволит нам запрашивать и сохранять данные. Мы определяем контекст, производный от System. Data. Entity. DbContext, и предоставляет типизированный DbSetный < домик > для каждого класса в нашей модели.

теперь мы начали использовать типы из Entity Framework, поэтому нам нужно добавить пакет NuGet EntityFramework.

  • Project — > управление пакетами NuGet. примечание. если у вас нет параметра " управление пакетами NuGet. ", следует установить последнюю версию NuGet
  • Выбор вкладки "в сети "
  • Выберите пакет EntityFramework
  • Щелкните Установить.

Добавьте инструкцию using для System. Data. Entity в начало программы. cs.

Под классом POST в Program. cs добавьте следующий производный контекст.

Ниже приведен полный список сведений о программе. cs, которая теперь должна содержаться в.

Это весь код, необходимый для начала хранения и извлечения данных. Очевидно, что в фоновом режиме происходит довольно много времени, и мы рассмотрим его в действии.

4. чтение & данных записи

Реализуйте метод Main в Program. cs, как показано ниже. Этот код создает новый экземпляр нашего контекста, а затем использует его для вставки нового блога. Затем он использует запрос LINQ для получения всех блогов из базы данных, упорядоченного в алфавитном порядке по названию.

Теперь можно запустить приложение и протестировать его.

Где мои данные?

По соглашению DbContext создала базу данных.

  • если локальный экземпляр экспресс-SQL доступен (устанавливается по умолчанию с Visual Studio 2010), Code First создает базу данных на этом экземпляре.
  • если SQL Express недоступна, Code First попытается использовать LocalDB (устанавливается по умолчанию с Visual Studio 2012).
  • База данных именуется после полного имени производного контекста, в нашем случае это кодефирстневдатабасесампле. BloggingContext

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

Просмотр — Обозреватель сервера

Щелкните правой кнопкой мыши подключения к данным и выберите Добавить подключение.

если вы не подключились к базе данных из обозреватель сервера, прежде чем нужно будет выбрать Microsoft SQL Server в качестве источника данных

Выбор источника данных

Подключение либо LocalDB, либо SQL Express в зависимости от того, какой из них был установлен.

теперь можно проверить схему, созданную Code First.

Начальная схема

DbContext выработала, какие классы следует включить в модель, взглянув на определяемые нами свойства DbSet. затем он использует набор соглашений по умолчанию Code First для определения имен таблиц и столбцов, определения типов данных, поиска первичных ключей и т. д. Далее в этом пошаговом руководстве мы рассмотрим, как можно переопределить эти соглашения.

5. Работа с изменениями модели

Пришло время внести некоторые изменения в нашу модель, при внесении этих изменений нам также потребуется обновить схему базы данных. для этого мы будем использовать функцию, именуемую Code First Migrations, или миграцию для коротких.

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

первым шагом является включение Code First Migrations для нашего BloggingContext.

инструменты- библиотека диспетчер пакетов — > консоль диспетчер пакетов

Запустите команду Enable-Migrations в консоли диспетчера пакетов.

В наш проект добавлена новая папка миграции, содержащая два элемента:

  • Configuration. CS — этот файл содержит параметры, которые будут использоваться миграцией для миграции BloggingContext. Нам не нужно ничего менять в этом пошаговом руководстве, но здесь можно указать начальные данные, зарегистрировать поставщики для других баз данных, изменить пространство имен, в котором создаются миграции, и т. д.
  • timestamp > _InitialCreate. CS — это первая миграция, которая представляет изменения, уже примененные к базе данных для того, чтобы сделать ее пустой базой данных, которая включает таблицы блогов и записей. хотя мы позволяем Code First автоматически создавать эти таблицы для нас, теперь, когда мы участвуем в миграции, они были преобразованы в миграцию. Code First также записана в локальную базу данных, к которой уже применена эта миграция. Метка времени для имени файла используется для упорядочения.

Теперь изменим нашу модель, добавив свойство URL в класс Blog:

  • выполните команду Add-Migration аддурл в консоли диспетчер пакетов. Команда Add-Migration проверяет наличие изменений с момента последней миграции и формирует новую миграцию с любыми найденными изменениями. Мы можем присвоить имя миграции. в этом случае вызывается миграция "Аддурл". Шаблонный код говорит, что нам нужно добавить столбец URL-адреса, который может содержать строковые данные, в dbo. Таблица блогов. При необходимости можно изменить шаблонный код, но это не является обязательным в этом случае.
  • выполните команду обновления базы данных в консоли диспетчер пакетов. Эта команда применит все незавершенные миграции к базе данных. Наша InitialCreate миграция уже применена, поэтому миграция будет просто применена к нашей новой Аддурл миграции. совет. параметр – verbose можно использовать при вызове Update-Database для просмотра SQL, выполняемой в базе данных.

Новый столбец URL-адреса теперь добавляется в таблицу блоги базы данных:

Схема с URL-адресом

6. заметки к данным

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

  • Давайте добавим в нашу модель класс User.
  • Также необходимо добавить набор в производный контекст
  • Если мы попытались добавить миграцию, возникнет ошибка, говорящая, чтоключ EntityType "User" не определен. Определите ключ для этого типа EntityType ". Поскольку EF не имеет возможности знать, что имя пользователя должно быть первичным ключом для пользователя.
  • Теперь мы будем использовать заметки к данным, поэтому нам нужно добавить инструкцию using в начало программы. CS
  • Теперь добавьте аннотацию для свойства UserName, чтобы обозначить, что это первичный ключ
  • Используйте команду adduser для добавления и миграции , чтобы сформировать шаблон миграции, чтобы применить эти изменения к базе данных.
  • Выполните команду обновления базы данных , чтобы применить новую миграцию к базе данных.

Новая таблица будет добавлена в базу данных:

Схема с пользователями

Полный список заметок, поддерживаемых EF,:

7. Fluent API

В предыдущем разделе мы рассматривали использование заметок к данным для дополнения или переопределения того, что было обнаружено соглашением. другой способ настройки модели — через API-интерфейс Code First fluent.

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

Чтобы получить доступ к API Fluent, переопределите метод OnModelCreating в DbContext. Предположим, что нужно переименовать столбец, в котором хранится User. DisplayName, в display_name.

  • Переопределите метод OnModelCreating в BloggingContext с помощью следующего кода
  • Используйте команду Add-Migration чанжедисплайнаме , чтобы сформировать шаблон миграции, чтобы применить эти изменения к базе данных.
  • Выполните команду обновления базы данных , чтобы применить новую миграцию к базе данных.

Столбец DisplayName теперь переименован в display_name:

Схема с переименованным отображаемым именем

Сводка

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

В первой главе при создании первого приложения с Entity Framework мы использовали подход Code First . Этот подход очень прост и удобен. Но он также и очень гибкий. Так, вполне часто распространена ситуация, когда база данных уже имеется. И здесь опять же поможет Code First. Иногда программисты называют данный подход Code Second . Посмотрим на примере.

Вначале создадим новый проект. Затем создадим тестовую базу данных. В Visual Studio выберем в меню пункт View->SQL Server Object Explorer . В открывшемся окне SQL Server Object Explorer создадим новую базу данных. Для этого раскроем узел сервера, нажмем на узел Databases правой кнопкой мыши и в появившемся контекстном меню выберем Add New Database .

Connect to Database in Visual Studio

Далее отобразится окно, в котором в качестве имени базы данных введем userstoredb:


После создания БД добавим в нее таблицу. Нажмем правой кнопкой мыши на узел Tables и в появившемся контекстном меню выберем Add New Table.


Затем в центральном поле в режиме дизайнера создадим следующее определение таблицы:


В поле T-SQL (или графически) определим структуру и имя таблицы, типы столбцов и после этого нажмем в верхнем левом углу на кнопку Update.

В новом окне нам будет выдана некоторая информация об изменениях, производимых в бд:


Нажмем на кнопку Update Database. И после этого будет создана таблица Users.

Мы можем добавить некоторые данные в таблицу. Для этого нажмем на таблицу в окне Server Explorer правой кнопкой мыши и выберем пункт View Data .


У нас откроется форма для работы с данными, в которую введем пару строк:


База данных готова. Теперь нам надо добавить подключение в файл конфигурации приложения. В Solution Explorer найдем файл App.config и откроем его. Перед закрывающим тегом </configuration> добавим новую секцию connectionStrings :

Теперь определим классы модели данных и контекста. Добавим класс модели User:

Читайте также: