Максимальная длина, не применяемая в миграции

Я использую efcore.sqlserver 1.0.1 с инструментами preview2 – у меня есть свойство строки, которое в sql-сервере создается как nvchar (max). Когда я добавляю значение длины строки (100) аннотации данных к свойству и добавляю новую миграцию, миграция вообще не изменяет столбец.

Однако, если я добавляю аннотацию Required и StringLength, то сгенерированная миграция изменяет столбец и показывает (.. maxLength: 100, nullable: false)

Почему это делается только в том случае, если я изменяю значение NULL?

Я считаю, что вам нужно использовать MaxLengthAttribute вместо StringLengthAttribute .

https://docs.efproject.net/en/latest/modeling/max-length.html#data-annotations

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

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

РЕДАКТИРОВАТЬ

Автор обнаружил, что это известная проблема для случаев, когда набор инструментов был обновлен с RC2 => RTM.

https://github.com/aspnet/Announcements/issues/195

К счастью, в EF нет такой проблемы 🙂 Я протестировал ваш сценарий, и он работает нормально.

Вы должны использовать для этого атрибут [MaxLength(100)] Вот документ: Аннотации данных MaxLength

Тестовый случай: я использовал MaxLength как 500 для моего теста.

Во-первых, я создал свойство, подобное этому:

  public string Title { get; set; } 

После миграции:

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

После этого я изменил его так:

  [MaxLength(500)] public string Title { get; set; } 

После миграции:

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

Сгенерированный скрипт:

  migrationBuilder.AlterColumn<string>( name: "Title", table: "Posts", maxLength: 500, nullable: true); 

Протестированные версии инструментов:

  <package id="Microsoft.EntityFrameworkCore.Tools" version="1.0.0-preview2-final" targetFramework="net461" developmentDependency="true" /> 
  • Как написать метод расширения EF.Functions?
  • Существует ли первый генератор POCO базы данных Entity Framework 7?
  • Перенос платформы Entity Framework 7: как получить столбец varchar с длиной больше 1?
  • Как я могу вызвать хранимую процедуру SQL, используя EntityFramework 7 и Asp.Net 5
  • Как подкрасить DbContext с множественными именами свойств DbSet в Entity Framework Core?
  • Как изменить запрос в EF Core 2.0, прежде чем он перейдет на SQL Server?
  • EF Core Composite Key, один внешний, один автоматический приращение
  • Условная сумма с использованием linq для условия Or
  • Ошибка при попытке выполнить хранимую процедуру обновления с использованием ядра структуры сущностей
  • EF Core вложенные Linq выбирают результаты в N + 1 SQL-запросах
  • При подключении к SQL Server произошла ошибка, связанная с сетью или конкретным экземпляром, в то время как миграция с миграцией ядра asp.net
  • Давайте будем гением компьютера.