예제 #1
0
        public void ResolveExpression_OptimizesEntityRefMemberComparisons()
        {
            // This test proves that the first stage (without resolving SqlEntityRefMemberExpressions) is executed.
            var memberInfo                = typeof(Kitchen).GetProperty("Cook");
            var entityExpression          = SqlStatementModelObjectMother.CreateSqlEntityDefinitionExpression(typeof(Kitchen));
            var fakeOptimizedRefIdentity  = new SqlColumnDefinitionExpression(typeof(int), "c", "KitchenID", false);
            var entityRefMemberExpression = new SqlEntityRefMemberExpression(entityExpression, memberInfo);

            _resolverMock
            .Stub(stub => stub.TryResolveOptimizedIdentity(entityRefMemberExpression))
            .Return(fakeOptimizedRefIdentity);

            var entity = CreateEntityExpressionWithIdentity(typeof(Cook), typeof(int));
            var binary = Expression.Equal(entityRefMemberExpression, entity);
            var sqlStatementBuilder = new SqlStatementBuilder();

            var result = ResolvingSelectExpressionVisitor.ResolveExpression(
                binary, _resolverMock, _stageMock, _mappingResolutionContext, _generator, sqlStatementBuilder);

            var expected = Expression.Equal(fakeOptimizedRefIdentity, entity.GetIdentityExpression());

            SqlExpressionTreeComparer.CheckAreEqualTrees(expected, result);
        }
예제 #2
0
        public void ResolveExpression_ResolvesSqlEntityRefMemberExpressions()
        {
            // This test proves that the second stage (resolving SqlEntityRefMemberExpressions) is executed.
            var memberInfo                = typeof(Cook).GetProperty("Kitchen");
            var entityExpression          = SqlStatementModelObjectMother.CreateSqlEntityDefinitionExpression(typeof(Cook));
            var entityRefMemberExpression = new SqlEntityRefMemberExpression(entityExpression, memberInfo);
            var sqlStatementBuilder       = new SqlStatementBuilder();

            var fakeResult = SqlStatementModelObjectMother.CreateSqlEntityDefinitionExpression(typeof(Kitchen));

            _stageMock
            .Expect(
                mock => mock.ResolveEntityRefMemberExpression(
                    Arg.Is(entityRefMemberExpression),
                    Arg <UnresolvedJoinInfo> .Matches(
                        i => i.OriginatingEntity == entityExpression && i.MemberInfo == memberInfo && i.Cardinality == JoinCardinality.One),
                    Arg.Is(_mappingResolutionContext)))
            .Return(fakeResult);

            var result = ResolvingSelectExpressionVisitor.ResolveExpression(
                entityRefMemberExpression, _resolverMock, _stageMock, _mappingResolutionContext, _generator, sqlStatementBuilder);

            Assert.That(result, Is.SameAs(fakeResult));
        }