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); }
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)); }