hel*_*rve 5 entity-framework xunit .net-core
以前,我们的工作单元实现从上下文中提供了简单的结果,例如
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 中)才会发生这种情况。它编译和构建没有问题,并且在实际托管 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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
370 次 |
| 最近记录: |