public void VisitMemberExpression() { var memberInfo = typeof(Cook).GetProperty("ID"); var expression = SqlStatementModelObjectMother.CreateSqlEntityDefinitionExpression(typeof(Cook)); var memberExpression = Expression.MakeMemberAccess(expression, memberInfo); var fakeResolvedExpression = new SqlLiteralExpression(1); _stageMock .Expect(mock => mock.ResolveMemberAccess(expression, memberInfo, _resolverMock, _mappingResolutionContext)) .Return(fakeResolvedExpression); _stageMock.Replay(); var result = ResolvingExpressionVisitor.ResolveExpression(memberExpression, _resolverMock, _stageMock, _mappingResolutionContext, _generator); _stageMock.VerifyAllExpectations(); Assert.That(result, Is.SameAs(fakeResolvedExpression)); }
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 result = ResolvingExpressionVisitor.ResolveExpression(binary, _resolverMock, _stageMock, _mappingResolutionContext, _generator); var expected = Expression.Equal(fakeOptimizedRefIdentity, entity.GetIdentityExpression()); SqlExpressionTreeComparer.CheckAreEqualTrees(expected, result); }
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 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 = ResolvingExpressionVisitor.ResolveExpression( entityRefMemberExpression, _resolverMock, _stageMock, _mappingResolutionContext, _generator); Assert.That(result, Is.SameAs(fakeResult)); }