Вот такой тест:
[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
...