Усилить ссылки на внешние ключи в усилиях

c# effort

Вопрос

Я использую Effort в Visual Studio и C # для воссоздания и модульного тестирования базы данных. Я пишу класс для одной таблицы, поэтому я только заполняю базу данных объектами из этой таблицы. Моя проблема заключается в том, что база данных Effort хочет, чтобы внешние ключи объекта ссылались на фактические объекты в базе данных.

Моя ошибка

System.Data.Entity.Infrastructure.DbUpdateException: при обновлении записей произошла ошибка. Подробнее см. Внутреннее исключение.

System.Data.Entity.Core.UpdateException: Произошла ошибка при обновлении записей. Подробнее см. Внутреннее исключение.

System.Reflection.TargetInvocationException: Исключение было выбрано целью вызова.

NMemory.Exceptions.ForeignKeyViolationException: Нарушение внешнего ключа [Table1 :: SettingsId]. Значение ключа [0] не существует в ссылочной таблице [Table2 :: SettingsId] .. Код ошибки: RelationError

Поскольку эта конкретная таблица имеет много внешних ключей к объектам, которые имеют много других внешних ключей, для этого потребуется большая работа. Есть ли способ в Effort, чтобы отключить это, чтобы я мог проверить эту таблицу в одиночку?

Принятый ответ

Я тоже столкнулся с этой проблемой и хотел проверить таблицу в области большей базы данных. Вы можете создать вспомогательный метод, который будет просто создавать все, что вам нужно, и передать базу данных или таблицу со ссылками. Это помогает, потому что вы можете называть это от того, какой метод / класс теста вам нужен и когда вам нужно.


Популярные ответы

Вы можете создать новый .edmx-файл из своей базы данных только для тестирования. Например:

В Visual Studio выберите File-> New-> Data-> Entity DataModel. Выберите «EF Designer из базы данных». Выберите или создайте соединение с существующей базой данных SQL Server и сохраните настройки подключения в app.config как «testConnectionString».

В дизайнере модели данных удалите любые отношения внешнего ключа, которые вам не нужны. Сохраните конструктора и перестройте проект.

В Effort передайте имя строки соединения (которая была сгенерирована при создании нового .edmx) методу CreateTransient , например:

EntityConnection connection = Effort.EntityConnectionFactory.CreateTransient("name=testConnectionString");

MyDbContext context = new MyDbContext(connection);

Это должно позволить вам вставлять значения в таблицу, не заполняя соответствующие таблицы внешних ключей.

Это связано с предупреждением, хотя, если тестируемый код использует любые свойства навигации, зависящие от внешних ключей, он не сработает. Это заставляет меня задаться вопросом, насколько ценным является такое «модульное тестирование».




Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему