hel*_*rve 5 entity-framework xunit .net-core
以前,我们的工作单元实现从上下文中提供了简单的结果,例如
    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”
堆栈跟踪:
在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);
    }
| 归档时间: | 
 | 
| 查看次数: | 370 次 | 
| 最近记录: |