DbSet.Where()返回查询中没有记录,即使它们存在于数据集中。

问题描述 投票:0回答:1

好吧,我快疯了。我已经使用DbSet.Where's 1000次了,但不管什么原因,它在这个特定的xunit测试中不能工作。问题的根源似乎在于我的where语句试图获得recipeid's=1的列表,以便我可以删除它们。当我停止代码并查看我的locals时,params在指定的地方被设置为1,但where却没有接收到它。

我把代码合并了一下,让它在这里更易读,但还是不能正常工作。我到底漏了什么?

[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();
            }
        }
c# linq unit-testing
1个回答
1
投票

看起来你可能没有在随后尝试查询(然后删除它们)之前将添加到数据库的记录持久化。这个 Where 方法正在寻找数据库,而数据库是空的,直到你的 SaveChanges()

在你保存更改之前,待添加的内容可能在以下地方等着你 context.Ingredients.Local

© www.soinside.com 2019 - 2024. All rights reserved.