我正在尝试使用流利的 nhibernate 创建动态基础映射。
我正在做的是通过 BaseMap< T > 签入: ClassMap< T > if 例如: (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);
这不起作用,因为在“地图”功能的深处,它会检查以下内容:
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 或任何类似的东西?