Выполнить контрольные примеры Find / Update Xunit без использования AsNoTracking () - PullRequest
0 голосов
/ 21 февраля 2019

Я использую следующие пакеты Nuget в моем модульном тестовом проекте, созданном в приложении .Net core 2.0.

enter image description here

Я создал базу данных InMemory дляМодульное тестирование.

Всякий раз, когда я выполняю тестовый блок, который включает в себя операции обновления, я получаю исключение

"экземпляр типа сущности" имя таблицы "не может быть отслежен, потому что другой экземпляр сто же самое значение ключа для {Id} ia уже отслеживается. Когда присоединяете существующие сущности, убедитесь, что только один экземпляр сущности с данным значением ключа присоединен ".

Это связано с методом FindByAsyncкоторый содержит AsNoTracking() метод.Метод выглядит примерно так, как показано ниже.

public virtual FindByAsync()
{
     Query= Query.AsNoTracking().AsExpandable.().Where(predicate);
}

Когда я комментирую эту функцию AsNoTracking().Модульный тест успешен.

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

1 Ответ

0 голосов
/ 21 февраля 2019

Поведение отслеживания определяет, будет ли Entity Framework Core хранить информацию об экземпляре объекта в его трекере изменений.Если объект отслеживается, любые изменения, обнаруженные в объекте, будут сохранены в базе данных во время SaveChanges ().

Запросы отслеживания

using (var context = new BloggingContext())
{
    var blog = context.Blogs.SingleOrDefault(b => b.BlogId == 1);
    blog.Rating = 5;
    context.SaveChanges();
}

Запросы без отслеживания

using (var context = new BloggingContext())
{
    var blogs = context.Blogs
        .AsNoTracking()
        .ToList();
}

Если экземпляры объекта изменены, это не будет обнаружено трекером изменений и SaveChanges ()не сохранит эти изменения в базе данных.

Дополнительная информация

Если вы будете следовать этому в своем коде и у вас не возникнет проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...