以前,我们的工作单元实现从上下文中提供了简单的结果,例如
public User Get(int id)
{
return Context.Users
.Single(u => u.Id == id);
}
Run Code Online (Sandbox Code Playgroud)
昨天,我按照以下方式向上下文添加了关系:
modelBuilder.Entity<UserRole>()
.HasOne(ur => ur.User)
.WithMany(u => u.UserRoles)
.HasForeignKey(ur => ur.UserId);
Run Code Online (Sandbox Code Playgroud)
然后还将这些导航属性包含在 UoW 中,例如:
public override User Get(int id)
{
return Context.Users
.Include(u => u.UserRoles)
.Single(u => u.Id == id);
}
Run Code Online (Sandbox Code Playgroud)
结果是,现在单元测试失败,并显示以下内容:
类型“Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions”上没有与指定参数匹配的方法“Include”
堆栈跟踪:
在System.Linq.EnumerableRewriter.FindMethod(类型类型,字符串名称,ReadOnlyCollection'1 args,Type [] typeArgs)在System.Linq.EnumerableRewriter.VisitMethodCall(MethodCallExpression m)在System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor访问者) )在System.Linq.Expressions.ExpressionVisitor.Visit(表达式节点)在System.Linq.Expressions.ExpressionVisitor.Visit(ReadOnlyCollection`1节点)在System.Linq.EnumerableRewriter.VisitMethodCall(MethodCallExpression m)在System.Linq.Expressions。 MethodCallExpression.Accept(ExpressionVisitor 访问者)位于 System.Linq.Expressions.ExpressionVisitor.Visit(表达式节点)位于 System.Linq.EnumerableQuery'1.GetEnumerator() 位于 System.Linq.EnumerableQuery'1.System.Collections.Generic.IEnumerable。 GetEnumerator() 在 System.Collections.Generic.List'1..ctor(IEnumerable'1 集合) 在 System.Linq.Enumerable.ToList[TSource](IEnumerable'1 源) 在 RetroNinja.Dal.Ef.Tests.ProjectSprintUowTests。 D:\Projects\Global Kinetic\RetroNinja\test\RetroNinja.Dal.Ef.Tests\ProjectSprintUowTests.cs 中的 ProjectSprint_GetUsers_HasUsers():第 81 行
仅当执行测试时(在 VS 或 cmd …