DbSet.Where () не возвращает записей о запросе, даже если они существуют в наборе данных - PullRequest
0 голосов
/ 28 апреля 2020

Хорошо, поэтому я схожу с ума здесь. Я использовал DbSet.Where 1000 раз и по какой-то причине он не работает в этом конкретном тесте xunit. Кажется, проблема связана с моим утверждением where, пытающимся получить список recipeid's = 1, чтобы я мог их удалить. Когда я останавливаю экод и смотрю на своих местных жителей, параметры устанавливаются в 1, где они обозначены, но там, где их не будет.

Я немного консолидировал код, чтобы сделать его более читабельным, но он все еще не работает как есть. Какого черта я пропускаю?

[Fact]
        public void DeleteIngredientListWithId_ReturnsProperCount()
        {
            //Arrange
            var dbOptions = new DbContextOptionsBuilder<IngredientDbContext>()
                .UseInMemoryDatabase(databaseName: $"IngredientDb{Guid.NewGuid()}")
                .Options;
            var sieveOptions = Options.Create(new SieveOptions());

            var fakeIngredientOne = new Ingredient { RecipeId = 1 };
            var fakeIngredientTwo = new Ingredient { RecipeId = 1 };
            var fakeIngredientThree = new Ingredient { RecipeId = 2 };

            //Act
            using (var context = new IngredientDbContext(dbOptions))
            {
                context.Ingredients.AddRange(fakeIngredientOne, fakeIngredientTwo, fakeIngredientThree);

                var service = new IngredientRepository(context, new SieveProcessor(sieveOptions));

                var ingredients = context.Ingredients.Where(i => i.RecipeId == 1).ToList();
                context.Ingredients.RemoveRange(ingredients);
                context.SaveChanges();

                //Assert
                var ingredientList = context.Ingredients.ToList();

                ingredientList.Should().ContainEquivalentOf(fakeIngredientThree);
                ingredientList.Should().HaveCount(1);

                context.Database.EnsureDeleted();
            }
        }

1 Ответ

1 голос
/ 28 апреля 2020

Похоже, что вы не сохраняете записи, которые вы добавили в базу данных, прежде чем пытаться выполнить запрос (а затем удалить их). Метод Where просматривает базу данных, которая пуста до тех пор, пока вы SaveChanges()

Пока вы не сохраните изменения, ожидающие добавления, вероятно, ожидают вас в context.Ingredients.Local

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