コード例 #1
0
        public void ResolveMemberAccess_OnSqlTableReferenceExpression()
        {
            var expression = new SqlTableReferenceExpression(SqlStatementModelObjectMother.CreateSqlTable(typeof(Cook)));
            var memberInfo = typeof(Cook).GetProperty("FirstName");

            MemberAccessResolver.ResolveMemberAccess(expression, memberInfo, _resolverMock, _stageMock, _mappingResolutionContext);
        }
コード例 #2
0
        public void ResolveMemberAccess_OnSqlEntityConstantExpression()
        {
            var expression = new SqlEntityConstantExpression(typeof(Cook), new Cook(), Expression.Constant(14));
            var memberInfo = typeof(Cook).GetProperty("FirstName");

            MemberAccessResolver.ResolveMemberAccess(expression, memberInfo, _resolverMock, _stageMock, _mappingResolutionContext);
        }
コード例 #3
0
        public void ResolveMemberAccess_OnEntity_WithCollectionMember()
        {
            var memberInfo          = typeof(Cook).GetProperty("Courses");
            var sqlEntityExpression = SqlStatementModelObjectMother.CreateSqlEntityDefinitionExpression(typeof(Cook), null, "c");

            MemberAccessResolver.ResolveMemberAccess(sqlEntityExpression, memberInfo, _resolverMock, _stageMock, _mappingResolutionContext);
        }
コード例 #4
0
        public void ResolveMemberAccess_OnEntityRefMemberExpression_NoOptimization()
        {
            var memberInfo = typeof(Cook).GetProperty("Substitution");
            var entityRefMemberExpression = SqlStatementModelObjectMother.CreateSqlEntityRefMemberExpression();

            _resolverMock
            .Stub(mock => mock.TryResolveOptimizedMemberExpression(entityRefMemberExpression, memberInfo))
            .Return(null);

            var fakeEntityExpression = SqlStatementModelObjectMother.CreateSqlEntityDefinitionExpression(typeof(Cook));

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

            var fakeResult = Expression.Constant(0);

            _resolverMock
            .Expect(mock => mock.ResolveMemberExpression(fakeEntityExpression, memberInfo))
            .Return(fakeResult);

            var result = MemberAccessResolver.ResolveMemberAccess(entityRefMemberExpression, memberInfo, _resolverMock, _stageMock, _mappingResolutionContext);

            _stageMock.VerifyAllExpectations();
            _resolverMock.VerifyAllExpectations();
            Assert.That(result, Is.SameAs(fakeResult));
        }
コード例 #5
0
        public void ResolveMemberAccess_OnUnsupportedExpression()
        {
            var operand           = new SqlColumnDefinitionExpression(typeof(int), "c", "ID", false);
            var convertExpression = Expression.And(operand, operand);
            var memberInfo        = typeof(Chef).GetProperty("LetterOfRecommendation");

            MemberAccessResolver.ResolveMemberAccess(convertExpression, memberInfo, _resolverMock, _stageMock, _mappingResolutionContext);
        }
コード例 #6
0
        public void ResolveMemberAccess_OnGroupingSelectExpression()
        {
            var expression = SqlStatementModelObjectMother.CreateSqlGroupingSelectExpression();
            var memberInfo = typeof(IGrouping <string, string>).GetProperty("Key");

            var result = MemberAccessResolver.ResolveMemberAccess(expression, memberInfo, _resolverMock, _stageMock, _mappingResolutionContext);

            Assert.That(result, Is.SameAs(expression.KeyExpression));
        }
コード例 #7
0
        public void ResolveMemberAccess_OnGroupingSelectExpression_StripsNames()
        {
            var expression = new SqlGroupingSelectExpression(
                new NamedExpression("k", Expression.Constant("key")),
                new NamedExpression("e", Expression.Constant("element")));
            var memberInfo = typeof(IGrouping <string, string>).GetProperty("Key");

            var result = MemberAccessResolver.ResolveMemberAccess(expression, memberInfo, _resolverMock, _stageMock, _mappingResolutionContext);

            Assert.That(result, Is.SameAs(((NamedExpression)expression.KeyExpression).Expression));
        }
コード例 #8
0
        public void ResolveMemberAccess_MemberAppliedToConstant()
        {
            var memberInfo = typeof(Cook).GetProperty("Substitution");
            var expression = Expression.Constant(new Cook());
            var fakeResult = Expression.Constant(0);

            _resolverMock
            .Expect(mock => mock.ResolveConstantExpression(expression))
            .Return(fakeResult);
            _resolverMock.Replay();

            MemberAccessResolver.ResolveMemberAccess(expression, memberInfo, _resolverMock, _stageMock, _mappingResolutionContext);
        }
コード例 #9
0
        public void ResolveMemberAccess_OnNewExpression_NoMembers()
        {
            var constructorInfo = TypeForNewExpression.GetConstructor(typeof(int), typeof(int));
            var newExpression   = Expression.New(
                constructorInfo,
                new[] { new NamedExpression("value", new SqlLiteralExpression(1)), new NamedExpression("value", new SqlLiteralExpression(2)) });

            MemberAccessResolver.ResolveMemberAccess(
                newExpression,
                typeof(TypeForNewExpression).GetField("C"),
                _resolverMock,
                _stageMock,
                _mappingResolutionContext);
        }
コード例 #10
0
        public void ResolveMemberAccess_OnColumnExpression()
        {
            var memberInfo         = typeof(Cook).GetProperty("Substitution");
            var constantExpression = Expression.Constant("test");
            var columnExpression   = new SqlColumnDefinitionExpression(typeof(string), "c", "Name", false);

            _resolverMock
            .Expect(mock => mock.ResolveMemberExpression(columnExpression, memberInfo))
            .Return(constantExpression);
            _resolverMock.Replay();

            var result = MemberAccessResolver.ResolveMemberAccess(columnExpression, memberInfo, _resolverMock, _stageMock, _mappingResolutionContext);

            _resolverMock.VerifyAllExpectations();
            Assert.That(result, Is.SameAs(constantExpression));
        }
コード例 #11
0
        void SetDefaultAccess(Member member, CollectionMapping mapping)
        {
            var resolvedAccess = MemberAccessResolver.Resolve(member);

            if (resolvedAccess != Access.Property && resolvedAccess != Access.Unset)
            {
                // if it's a property or unset then we'll just let NH deal with it, otherwise
                // set the access to be whatever we determined it might be
                mapping.Set(x => x.Access, Layer.Defaults, resolvedAccess.ToString());
            }

            if (member.IsProperty && !member.CanWrite)
            {
                mapping.Set(x => x.Access, Layer.Defaults, cfg.GetAccessStrategyForReadOnlyProperty(member).ToString());
            }
        }
コード例 #12
0
        public void ResolveMemberAccess_OnEntity()
        {
            var memberInfo          = typeof(Cook).GetProperty("Substitution");
            var sqlEntityExpression = SqlStatementModelObjectMother.CreateSqlEntityDefinitionExpression(typeof(Cook));
            var fakeResult          = Expression.Constant(0);

            _resolverMock
            .Expect(mock => mock.ResolveMemberExpression(sqlEntityExpression, memberInfo))
            .Return(fakeResult);
            _resolverMock.Replay();

            var result = MemberAccessResolver.ResolveMemberAccess(sqlEntityExpression, memberInfo, _resolverMock, _stageMock, _mappingResolutionContext);

            _resolverMock.VerifyAllExpectations();
            Assert.That(result, Is.SameAs(fakeResult));
        }
コード例 #13
0
        public void ResolveMemberAccess_OnUnaryExpression_Convert()
        {
            var operand           = new SqlColumnDefinitionExpression(typeof(Cook), "c", "ID", false);
            var convertExpression = Expression.Convert(Expression.Convert(operand, typeof(Chef)), typeof(Chef));
            var memberInfo        = typeof(Chef).GetProperty("LetterOfRecommendation");
            var fakeResult        = Expression.Constant(0);

            _resolverMock
            .Expect(mock => mock.ResolveMemberExpression(operand, memberInfo))
            .Return(fakeResult);
            _resolverMock.Replay();

            var result = MemberAccessResolver.ResolveMemberAccess(convertExpression, memberInfo, _resolverMock, _stageMock, _mappingResolutionContext);

            _resolverMock.VerifyAllExpectations();
            Assert.That(result, Is.SameAs(fakeResult));
        }
コード例 #14
0
        public void ResolveMemberAccess_OnNewExpression_FieldInfo()
        {
            var constructorInfo = TypeForNewExpression.GetConstructor(typeof(int), typeof(int));
            var newExpression   = Expression.New(
                constructorInfo,
                new[] { new NamedExpression("value", new SqlLiteralExpression(1)), new NamedExpression("value", new SqlLiteralExpression(2)) },
                typeof(TypeForNewExpression).GetField("C"), typeof(TypeForNewExpression).GetMethod("get_B"));

            var result = MemberAccessResolver.ResolveMemberAccess(
                newExpression,
                typeof(TypeForNewExpression).GetField("C"),
                _resolverMock,
                _stageMock,
                _mappingResolutionContext);

            Assert.That(result, Is.SameAs(((NamedExpression)newExpression.Arguments[0]).Expression));
        }
コード例 #15
0
        public void ResolveMemberAccess_OnNamedExpression()
        {
            var operand         = new SqlColumnDefinitionExpression(typeof(Cook), "c", "ID", false);
            var namedExpression = new NamedExpression("two", new NamedExpression("one", operand));
            var memberInfo      = typeof(Cook).GetProperty("FirstName");

            var fakeResult = Expression.Constant(0);

            _resolverMock
            .Expect(mock => mock.ResolveMemberExpression(operand, memberInfo))
            .Return(fakeResult);
            _resolverMock.Replay();

            var result = MemberAccessResolver.ResolveMemberAccess(namedExpression, memberInfo, _resolverMock, _stageMock, _mappingResolutionContext);

            _resolverMock.VerifyAllExpectations();
            Assert.That(result, Is.SameAs(fakeResult));
        }
コード例 #16
0
        public void ResolveMemberAccess_OnEntityRefMemberExpression_WithSuccessfulOptimization()
        {
            var memberInfo = typeof(Cook).GetProperty("Substitution");
            var entityRefMemberExpression = SqlStatementModelObjectMother.CreateSqlEntityRefMemberExpression();

            var fakeResolvedExpression = ExpressionHelper.CreateExpression();

            _resolverMock
            .Expect(mock => mock.TryResolveOptimizedMemberExpression(entityRefMemberExpression, memberInfo))
            .Return(fakeResolvedExpression);

            var result = MemberAccessResolver.ResolveMemberAccess(entityRefMemberExpression, memberInfo, _resolverMock, _stageMock, _mappingResolutionContext);

            _resolverMock.VerifyAllExpectations();
            _stageMock.AssertWasNotCalled(
                mock => mock.ResolveEntityRefMemberExpression(
                    Arg <SqlEntityRefMemberExpression> .Is.Anything, Arg <IJoinInfo> .Is.Anything, Arg <IMappingResolutionContext> .Is.Anything));
            Assert.That(result, Is.SameAs(fakeResolvedExpression));
        }
コード例 #17
0
        public void ResolveMemberAccess_OnNestedNamedConvertExpressions()
        {
            var operand = new SqlColumnDefinitionExpression(typeof(Cook), "c", "ID", false);
            var innerMostNamedExpression   = new NamedExpression("inner", operand);
            var innerConvertExpression     = Expression.Convert(innerMostNamedExpression, typeof(Chef));
            var outerNamedExpression       = new NamedExpression("outer", innerConvertExpression);
            var outerMostConvertExpression = Expression.Convert(outerNamedExpression, typeof(Cook));

            var memberInfo = typeof(Cook).GetProperty("FirstName");

            var fakeResult = Expression.Constant("empty");

            _resolverMock
            .Expect(mock => mock.ResolveMemberExpression(operand, memberInfo))
            .Return(fakeResult);
            _resolverMock.Replay();

            var result = MemberAccessResolver.ResolveMemberAccess(outerMostConvertExpression, memberInfo, _resolverMock, _stageMock, _mappingResolutionContext);

            _resolverMock.VerifyAllExpectations();
            Assert.That(result, Is.SameAs(fakeResult));
        }
コード例 #18
0
 public void AutoProperty()
 {
     MemberAccessResolver.Resolve(ReflectionExtensions.ToMember <Example, string>(x => x.AutoProperty))
     .ShouldEqual(FluentNHibernate.Mapping.Access.Property);
 }
コード例 #19
0
 public virtual Access GetAccessStrategyForReadOnlyProperty(Member member)
 {
     return(MemberAccessResolver.Resolve(member));
 }
コード例 #20
0
 public void PropertyNoSetter()
 {
     MemberAccessResolver.Resolve(ReflectionExtensions.ToMember <Example, string>(x => x.PropertyNoSetter))
     .ShouldEqual(FluentNHibernate.Mapping.Access.ReadOnlyPropertyThroughCamelCaseField());
 }
コード例 #21
0
 public void Field()
 {
     MemberAccessResolver.Resolve(ReflectionExtensions.ToMember <Example, string>(x => x.Field))
     .ShouldEqual(FluentNHibernate.Mapping.Access.Field);
 }
コード例 #22
0
 public void Method()
 {
     MemberAccessResolver.Resolve(ReflectionExtensions.ToMember <Example, IEnumerable <Example> >(x => x.GetViaMethod()))
     .ShouldEqual(FluentNHibernate.Mapping.Access.Field);
 }
コード例 #23
0
 public void AutoPropertyPrivateSetter()
 {
     MemberAccessResolver.Resolve(ReflectionExtensions.ToMember <Example, string>(x => x.AutoPropertyPrivateSetter))
     .ShouldEqual(FluentNHibernate.Mapping.Access.BackField);
 }