Подтвердить что ты не робот

Код EntityFramework: установить порядок полей

Я использую EntityFramework с подходом "Code first" с миграциями.

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

Я пробовал это:

[Key, Column(Order=0)]
public int MyFirstKeyProperty { get; set; }

[Column(Order=1)]
public int MySecondKeyProperty { get; set; }

Но это, похоже, не работает.

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

Я использую ядро ​​ASP.NET Core и EF Core (SqlServer) v1.1.0.

4b9b3361

Ответ 1

В настоящее время упорядочение столбцов по свойству класса не реализовано. Здесь долгое обсуждение порядка колонок. Столбец заказа № 2272

Дополнение от 12.07.2017

Эта проблема находится в вехе отставания. Это означает, что этого не произойдет в версии 2.0. Мы переоценим отставание после выпуска 2.0 и рассмотрим этот пункт в то время.

Дополнение от 10.06.2009

Выпуск 2272 поставляется с EF Core v2.1 и сопоставляет порядок столбцов в сгенерированной таблице с порядком свойств в классе. Однако, как упоминалось @lloyd-conrade, это полезно только для первоначального создания

Новая проблема, # 10059, была создана, чтобы отследить возможную реализацию соблюдения свойства атрибута Столбца.

Если реализация # 2272 недостаточна для вас, и может помочь указание чего-то вроде [Столбец (Заказ = 1)], пожалуйста, проголосуйте за эту проблему и добавьте подробности о вашем сценарии (если его еще нет в списке) ниже.

Обратите внимание, что ярлык "Punted for 3.0" был добавлен 10 мая 2019 года, то есть он не будет поставляться в EF Core 3.0.

Ответ 2

Обновление: в EF Core 2.1, по крайней мере, для начальной миграции столбцы добавляются в таблицы в порядке, в котором соответствующие свойства объявляются в соответствующих классах, а не в алфавитном порядке. Смотрите здесь Но обратите внимание, что любые последующие миграции Entity Framework, выполняемые с теми же таблицами, не изменят порядок столбцов столбцов, созданных ранее.

Ответ 3

В настоящий момент ядро ​​EF не поддерживает его. Но есть и обходной путь для этого. То есть вы можете явно указать SQL в своей операции миграции.

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

migrationBuilder.Sql("CREATE TABLE Properties(
   MyFirstKeyProperty   INT   NOT NULL,
   MySecondKeyProperty int    NOT NULL,
   AGE  INT   NOT NULL,
   ......
   ......   
   PRIMARY KEY (MyFirstKeyProperty)
)");

Вы можете прочитать о rowanmiller commnet здесь о том, как решить эту проблему только сейчас p >