流暢な nhibernate を使用して動的ベース マッピングを作成しようとしています。
私がやっていることは、 BaseMap< T > : ClassMap< T > によるチェックインです。たとえば、 (typeof(ICategorizedEntity).IsAssignableFrom(typeof(T)))
もしそうなら、ICategorizedEntity のインターフェイスに属する「Category」という名前のプロパティをマップしたいのですが、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パラメーター名: 式」が表示されます。
MemberExpression または同様のものを作成してキャストするにはどうすればよいですか?