Я пытаюсь создать динамическое базовое сопоставление с помощью свободного nhibernate.
Я проверяю BaseMap‹ T > : ClassMap‹ T > если, например: (typeof(ICategorizedEntity).IsAssignableFrom(typeof(T)))
Если это так, я хочу сопоставить свойство с именем «Категория», которое принадлежит интерфейсу ICategorizedEntity, но функция Map(Func) принимает только свойства T, поэтому я попытался немного угадать с linq и придумал это:
Expression<Func<ICategorizedEntity, object>> exp = x => x.Category;
var parameter = Expression.Parameter(typeof (T));
var lmd = Expression.Lambda<Func<T, object>>(exp, parameter);
Map(lmd);
Что не работает, потому что глубоко внутри функции «Карта» проверяется следующее:
MemberExpression memberExpression = (MemberExpression) null;
if (expression.NodeType == ExpressionType.Convert)
memberExpression = ((UnaryExpression) expression).Operand as MemberExpression;
else if (expression.NodeType == ExpressionType.MemberAccess)
memberExpression = expression as MemberExpression;
if (enforceCheck && memberExpression == null)
throw new ArgumentException("Not a member access", "expression");
И я получаю «Не доступ к члену\r\nИмя параметра: выражение».
Как я могу создать и применить MemberExpression или что-то подобное, что будет работать?