У меня есть ряд интеграционных тестов, которые напрямую обращаются к БД - создайте объекты с предварительными условиями тестирования - выполняет тесты, а затем очищает их потом - однако я выиграл, чтобы попробовать один и тот же подход в памяти.
Я только что использовал Effort в своем проекте, и он работает очень легко. Однако я столкнулся с проблемой, которую я пытался, но не смог решить.
Одна из таблиц, которые мне нужны, заполнены фиктивными данными - в качестве тестового условия - содержит вычисленный столбец (nvarchar, а не null). В рамках теста я действительно не забочусь о значении этого столбца - но даже если я попытаюсь вставить фиктивные данные, мои данные будут проигнорированы, а затем я получаю ошибку с ошибкой:
"Column 'x' cannot be null. Error code: GenericError"
В моих тестах я использую тот же файл edmx, который используется фактическим кодом. Это не позволяет мне постоянно обновлять копию edmx.
Есть ли способ, с помощью которого я могу заставить тест обновить edmx (во время выполнения), чтобы столбец был нулевым не вычисленным столбцом? [overriding OnModelCreating] или есть способ вставить значение по умолчанию (что-нибудь для этого столбца), чтобы остановить эту ошибку? [переопределение SaveChanges]
В настоящее время я пробовал следующее:
Редактировать:
Я попытался переопределить метод OnModelCreating , но безрезультатно, поскольку это DB-First.
modelBuilder.Entity<Entity_Name>().Property(p => p.x).IsOptional().HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.None);
Откройте файл EDMX в редакторе XML, найдите свою сущность под StorageModels и добавьте в определение столбца StoreGeneratedPattern="Computed"
.
Но если вы обновите или удалите и добавите эту таблицу, вы потеряете эту модификацию. На самом деле вы можете написать консольное приложение, которое обновит ваш edmx-файл и добавит StoreGeneratedPattern="Computed"
где это необходимо, и вы можете добавить это приложение для предварительной сборки событий в студии.