Как мне изменить модель базы данных в Entity Framework? - PullRequest
0 голосов
/ 29 августа 2018

EF новичок здесь.

Как я могу вносить изменения в модель базы данных, используя Entity Framework?

Я имею в виду в модели БД, например, изменение типов данных столбцов, добавление атрибутов и т. Д.?

например. У меня есть строковое свойство Password в таблице User, и я хочу добавить [DataType(DataType.Password)] Attribute или [Required] или что-нибудь еще.

Как я должен это сделать? Конечно, наряду с внесением изменений в мою БД? Я создал модель БД из локального файла mdf (отсоединенного от mssql studio) с помощью 'EF Designer from database', поэтому у меня есть модель emdx внутри Моделей (asp.net mvc5) с классами для каждой таблицы и MDF БД в App_Data.

Должен ли я изменить эти классы?

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

Я добавлю, что не могу включить миграцию: Создание DbModelBuilder или запись EDMX из DbContext, созданного с использованием Database First или Model First, не поддерживается.

EDMX можно получить только из Code First DbContext, созданного без использования существующей DbCompiledModel.

1 Ответ

0 голосов
/ 29 августа 2018

Я думаю, что вы смешиваете все здесь.

Если у вас есть файл EDMX, то ваши модели создаются во время компиляции (или вы можете сгенерировать их, щелкнув правой кнопкой мыши файл Model.tt -> Run Custom Tool). Поэтому добавление атрибутов к свойствам в классе , представляющем сущность модели, действительно будет перезаписано при следующей компиляции. Решение:

  1. Создать еще один partial класс для сгенерированных классов
  2. В классе partial украсьте класс атрибутом [MetadataType] и присвойте ему тип класса метаданных. Класс метаданных - это простой класс с теми же свойствами, что и у сгенерированного класса, но с другим именем для предотвращения конфликтов имен. С точки зрения дизайна это должно быть abstract, потому что вы не должны создавать его экземпляры, но это не обязательно.
  3. В классе метаданных украсьте соответствующие свойства с помощью атрибутов validation и DataType.

Насколько мне известно, использование сначала модели или базы данных сначала не поддерживает миграцию, как в коде сначала. Если вы хотите автоматически вносить изменения в свою схему (полу), я считаю, что ваш лучший вариант:

  1. Внесите изменения в модель в конструкторе EDMX
  2. Щелкните правой кнопкой мыши область проектирования EDMX -> Создать базу данных из модели.
  3. После выбора соединения с вашей базой данных будет сгенерирован SQL для генерации вашей схемы. Это немного неуклюже, потому что это будет стирать ваши данные каждый раз, поэтому у вас должен быть скрипт для повторного заполнения вашей базы данных после каждого раза.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...