예제 #1
0
        public void CanTranslateFetchCollectionClause()
        {
            var session       = new Mock <ISession>();
            var executor      = new SpecificationExecutor();
            var specification = new WithFetchCollection();
            var queryable     = executor.ExecuteSpecification(session.Object, specification);

            var fetchManyMethodInfo = ReflectionHelper.FindMethod(
                BindingFlags.Static | BindingFlags.Public,
                typeof(EagerFetchingExtensionMethods),
                nameof(EagerFetchingExtensionMethods.FetchMany),
                null,
                new ArgumentConstraint(typeof(IQueryable <>), 1),
                new ArgumentConstraint(typeof(Expression <>).MakeGenericType(typeof(Func <,>)), 2));

            var lambda = (MethodCallExpression)queryable.Expression;

            Assert.Equal(ExpressionType.Call, lambda.NodeType);
            Assert.Same(
                fetchManyMethodInfo.MakeGenericMethod(typeof(User), typeof(Order)),
                lambda.Method);

            Assert.Same(
                specification.Expression.Body,
                ((UnaryExpression)((LambdaExpression)((UnaryExpression)lambda.Arguments.ElementAt(1)).Operand).Body).Operand);
        }
예제 #2
0
        public void CanTranslateFetchCollectionClause()
        {
            var context = new Mock <Context>();

            context
            .Setup(x => x.Set <User>())
            .Returns(new FakeSet <User>());

            var executor      = new SpecificationExecutor();
            var specification = new WithFetchCollection();
            var queryable     = executor.ExecuteSpecification(context.Object, specification);

            var fetchMethodInfo = ReflectionHelper.FindMethod(
                BindingFlags.Static | BindingFlags.Public,
                typeof(EntityFrameworkQueryableExtensions),
                nameof(EntityFrameworkQueryableExtensions.Include),
                null,
                new ArgumentConstraint(typeof(IQueryable <>), 1),
                new ArgumentConstraint(typeof(Expression <>).MakeGenericType(typeof(Func <,>)), 2));

            var lambda = (MethodCallExpression)queryable.Expression;

            Assert.Equal(ExpressionType.Call, lambda.NodeType);
            Assert.Same(
                fetchMethodInfo.MakeGenericMethod(typeof(User), typeof(ICollection <Order>)),
                lambda.Method);

            Assert.Same(
                specification.Expression.Body,
                ((LambdaExpression)((UnaryExpression)lambda.Arguments.ElementAt(1)).Operand).Body);
        }