运行单元测试时出现“无法加载导航,因为未跟踪实体”错误

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

我正在尝试运行一个单元测试(使用Moq),该测试基本上断言新记录已添加到我们的测试数据库中。

下面的查询加载一个 User 实体,并应加载 User 上的导航属性,我们将其称为 EntityA。单元测试最终到达一个方法,该方法的主体包含以下内容:

return context.Entry(this)
              .Collection(c => c.EntityA)
              .Query();

context变量作为参数传递到方法中,并且是我们正在使用的DbContext的实例,而this代表用户。 当尝试运行此特定代码时,我收到以下错误:

System.InvalidOperationException : The navigation 'User.EntityA' cannot be loaded because the entity is not being tracked. Navigations can only be loaded for tracked entities.
这个方法已经存在相当长一段时间了,所以我想知道这是否只是需要向此查询添加一些显式跟踪属性(也许是

.AsTracking?)的测试。我不知道为什么以前没有发现这一点,因为它被用在我们代码库的多个高可见度区域中。我对如何解决这个问题的任何想法持开放态度。

c# entity-framework entity-framework-core
1个回答
0
投票
就我而言,我从 AddDbContext() 中删除了此配置, 如果你真的想使用这个配置。只需使用 2 个 dbcontexts

option.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking);
    
© www.soinside.com 2019 - 2024. All rights reserved.