我正在尝试使用Fluent NHibernate创建动态基础映射。我的做法是在BaseMap<T>:ClassMap<T>中检查是否满足以下条件:(typeof(ICategorizedEntity).IsAssignableFrom(typeof(T)))。如果是这样,我想映射一个名为“Category”的属性,该属性属于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);
这种方法不起作用,因为在“Map”函数内部它会检查以下内容:
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参数名称:expression”的错误。
我应该如何创建和转换MemberExpression或任何类似的内容,以使其正常工作?
Map(x => ((ICategorizedEntity)x).Category);
- Adam Tal