以前,我们的工作单元实施提供了来自Context的简单结果,例如
public User Get(int id)
{
return Context.Users
.Single(u => u.Id == id);
}
昨天我按照以下内容添加了与上下文的关系:
modelBuilder.Entity<UserRole>()
.HasOne(ur => ur.User)
.WithMany(u => u.UserRoles)
.HasForeignKey(ur => ur.UserId);
然后还在UoW中包含这些导航属性,例如:
public override User Get(int id)
{
return Context.Users
.Include(u => u.UserRoles)
.Single(u => u.Id == id);
}
结果是,现在,单元测试失败并显示以下内容:
在类型'Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions'上没有与指定参数匹配的方法'Include'
堆栈追踪:
at System.Linq.EnumerableRewriter.FindMethod(Type type,String name,ReadOnlyCollection'1 args,Type [] typeArgs) 在System.Linq.EnumerableRewriter.VisitMethodCall(MethodCallExpression m) 在System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor) 在System.Linq.Expressions.ExpressionVisitor.Visit(表达式节点) 在System.Linq.Expressions.ExpressionVisitor.Visit(ReadOnlyCollection`1个节点) 在System.Linq.EnumerableRewriter.VisitMethodCall(MethodCallExpression m) 在System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor) 在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 source) 在RetroNinja.Dal.Ef.Tests.ProjectSprintUowTests.ProjectSprint_GetUsers_HasUsers()在D:\ Projects \ Global Kinetic \ RetroNinja \ test \ RetroNinja.Dal.Ef.Tests \ ProjectSprintUowTests.cs:第81行
这仅在执行测试时发生(在VS或cmd中)。它编译和构建没有任何问题,并且在实际托管Web项目和浏览时行为是预期的,也就是说,我在前端看到了导航属性的结果。
我试图在我的单元测试project.json文件中显式引用EF Core 1.0.1,并在实际的文本.cs文件中添加using子句,但它没有区别。
我在哪里开始对此进行故障排除?
根据要求,这是单元测试代码:
[Fact]
public void UserUow_GetUser_HasUser()
{
_fakeContext.Object.Role.AddRange(new List<Role>()
{
new Role() { Id = 1, Name = "Role 1"},
new Role() { Id = 2, Name = "Role 2"},
});
_fakeContext.Object.UserRole.AddRange(new List<UserRole>()
{
new UserRole() { Id = 1, UserId = 1, RoleId = 1, IsActive = true },
new UserRole() { Id = 2, UserId = 1, RoleId = 2, IsActive = true }
});
_fakeContext.Object.User.Add(new User() { Id = 1, Username = "User 1" });
User user = UserUow.Get(1);
Assert.NotNull(user);
Assert.True(user.Id == 1);
Assert.NotNull(user.UserRoles);
Assert.True(user.UserRoles.Count == 2);
Assert.True(user.UserRoles.ToList()[0].Role.Id == 1);
Assert.True(user.UserRoles.ToList()[1].Role.Id == 2);
}