пробелма с InheritanceMapping
От: Alexus_256  
Дата: 28.02.11 09:36
Оценка: 66 (1)
Вот такой тест:
        [InheritanceMapping(Code = 1, Type = typeof(InhMapDescenant1))] // (1)
        public class InhMapBase
        {
            [MapField(IsInheritanceDiscriminator = true)]
            public Int32 Type;
        }

        [MapField("DescenantPropIdFake", "DescenantProp.Id")]
        public class InhMapDescenant1: InhMapBase
        {
            [MapIgnore]
            public InhMapTypeOfProp DescenantProp;
        }

        public class InhMapTypeOfProp 
        {
            public Int32 Id;
        }


        [Test]
        public void InheritanceMappingIssueTest()
        {
            using (var db = GetDbManager())
            {
                var q1 = db.GetTable<InhMapDescenant1>();
                var q = q1.Where(_ => _.DescenantProp.Id == 123);

                var sql = ((Table<InhMapDescenant1>)q).SqlText;
                Assert.IsNotEmpty(sql);
            }
        }

Если закомментировать строку (1) — тест выполняется. Если раскомментировать — проваливается.
Кто нибудь может подсказать, в чём дело?


Текст ошиьки и стек-трейс:
BLToolkit.Data.Linq.LinqException : '_.DescenantProp.Id' cannot be converted to SQL.

в BLToolkit.Data.Linq.ExpressionParserOld`1.ParseExpression(LambdaInfo lambda, Expression expression, QuerySource[] queries) в ExpressionParser.QueryBuilder.cs: line 1567
в BLToolkit.Data.Linq.ExpressionParserOld`1.ParseCompare(LambdaInfo lambda, ExpressionType nodeType, Expression left, Expression right, QuerySource[] queries) в ExpressionParser.QueryBuilder.cs: line 2411
в BLToolkit.Data.Linq.ExpressionParserOld`1.ParsePredicate(LambdaInfo lambda, Expression expression, QuerySource[] queries) в ExpressionParser.QueryBuilder.cs: line 2240
в BLToolkit.Data.Linq.ExpressionParserOld`1.ParseSearchCondition(ICollection`1 conditions, LambdaInfo lambda, Expression expression, QuerySource[] queries) в ExpressionParser.QueryBuilder.cs: line 3066
в BLToolkit.Data.Linq.ExpressionParserOld`1.ParseWhere(LambdaInfo l, QuerySource select) в ExpressionParser.Parsing.cs: line 1255
в BLToolkit.Data.Linq.ExpressionParserOld`1.<>c__DisplayClass186.<>c__DisplayClass18a.<ParseSequenceInternal>b__10b(Expression seq, LambdaInfo l) в ExpressionParser.Parsing.cs: line 426
в BLToolkit.Linq.ExpressionHelper.<>c__DisplayClass8.<IsQueryableMethod>b__5(LambdaInfo p) в ExpressionHelper.cs: line 129
в BLToolkit.Linq.ExpressionHelper.<>c__DisplayClass57.<CheckIfLambda>b__54(Expression body) в ExpressionHelper.cs: line 378
в BLToolkit.Linq.ExpressionHelper.IsLambda(Expression expr, Func`2[] parameters, Func`2 body, Func`2 func) в ExpressionHelper.cs: line 331
в BLToolkit.Linq.ExpressionHelper.CheckIfLambda(Expression expr, Int32 nparms, Func`2 lambda) в ExpressionHelper.cs: line 375
в BLToolkit.Linq.ExpressionHelper.<>c__DisplayClass8.<IsQueryableMethod>b__4(Expression l) в ExpressionHelper.cs: line 129
в BLToolkit.Linq.ExpressionHelper.IsMethod(MethodCallExpression expr, Type declaringType, String methodName, Func`2[] args, Func`2 func) в ExpressionHelper.cs: line 93
в BLToolkit.Linq.ExpressionHelper.IsQueryableMethod(MethodCallExpression pi, Func`3 lambda) в ExpressionHelper.cs: line 126
в BLToolkit.Data.Linq.ExpressionParserOld`1.<>c__DisplayClass186.<ParseSequenceInternal>b__10a(MethodCallExpression pi) в ExpressionParser.Parsing.cs: line 421
в BLToolkit.Linq.ExpressionHelper.Match(T expr, Func`2[] matches) в ExpressionHelper.cs: line 390
в BLToolkit.Data.Linq.ExpressionParserOld`1.ParseSequenceInternal(Expression info) в ExpressionParser.Parsing.cs: line 380
в BLToolkit.Data.Linq.ExpressionParserOld`1.ParseSequence(Expression info) в ExpressionParser.Parsing.cs: line 247
в BLToolkit.Data.Linq.ExpressionParserOld`1.<Parse>b__ed(Expression pi) в ExpressionParser.Parsing.cs: line 111
в BLToolkit.Linq.ExpressionHelper.Match(T expr, Func`2[] matches) в ExpressionHelper.cs: line 390
в BLToolkit.Data.Linq.ExpressionParserOld`1.Parse(String contextID, MappingSchema mappingSchema, Func`1 createSqlProvider, Expression expression, ParameterExpression[] compiledParameters) в ExpressionParser.Parsing.cs: line 86
в BLToolkit.Data.Linq.Query`1.GetQuery(IDataContextInfo dataContextInfo, Expression expr) в Query.cs: line 131
в BLToolkit.Data.Linq.Table`1.GetQuery(Expression expression, Boolean cache) в TableT.cs: line 106
в BLToolkit.Data.Linq.Table`1.get_SqlText() в TableT.cs: line 84
...
inheritancemapping
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.