在测试运行时找不到EF Core扩展.Include()

时间:2016-09-20 09:35:46

标签: entity-framework .net-core xunit

以前,我们的工作单元实施提供了来自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);
    }

0 个答案:

没有答案