Использование Effort (EF Testing Tool) с вычисляемым столбцом

У меня есть ряд интеграционных тестов, которые напрямую обращаются к БД - создают обязательные объекты теста - выполняют тесты, а затем очищают их - однако я хотел попробовать тот же подход в памяти.

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

Одна из таблиц, которые мне нужно заполнить фиктивными данными - в качестве предварительного условия теста - содержит вычисляемый столбец (nvarchar, а не null). Что касается объема теста, мне действительно не важно значение этого столбца, но даже если я пытаюсь вставить фиктивные данные, мои данные игнорируются, а затем я получаю сообщение об ошибке:

"Column 'x' cannot be null. Error code: GenericError"

В моих тестах я использую тот же файл edmx, который используется в реальном коде. Это мешает мне постоянно обновлять копию edmx.

Есть ли способ, которым я могу заставить тест обновить EDMX (во время выполнения), чтобы этот столбец обнуляемый не вычисляемый столбец? [переопределение OnModelCreating] или есть способ вставить значение по умолчанию (что-нибудь идет для этого столбца), чтобы остановить эту ошибку? [переопределение SaveChanges]

В настоящее время я пробовал следующее:

  • Присоединение объектов с использованием.Attach() вместо.Add()
  • Установка EntityState на Неизменный после добавления
  • Принудительное значение через Entry.OriginalValues ​​[это значения, поскольку сущность находится в состоянии добавления]

Редактировать:

Я попытался переопределить метод OnModelCreating, но безрезультатно, поскольку это DB-First.

modelBuilder.Entity<Entity_Name>().Property(p => p.x).IsOptional().HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.None);

1 ответ

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

Смотрите вопрос на GitHub

Откройте файл EDMX в редакторе XML, найдите свою сущность в StorageModels и добавьте в определение столбца StoreGeneratedPattern="Computed",

Но если вы обновите или удалите и добавите эту таблицу, вы потеряете эту модификацию. На самом деле вы можете написать консольное приложение, которое обновит ваш файл edmx и добавит StoreGeneratedPattern="Computed" где это необходимо, и вы можете добавить эти приложения для предварительной сборки событий в студии.

Другие вопросы по тегам