我有一段代码需要在我的存储库保存时检查实体。我在保存时有一个NHibernate拦截器来检查这个但是当我调用GetGenericTypeDefinition
函数时代码失败并出现错误:
[InvalidOperationException:由于对象的当前状态,操作无效。] System.RuntimeType.GetGenericTypeDefinition()+ 7525641
代码就是这样:
protected override object PerformSaveOrUpdate(SaveOrUpdateEvent evt)
{
if (evt.Entity.GetType().GetGenericTypeDefinition() == typeof(IChild<>))
{
var parent = (evt.Entity as IChild<Entity>).Parent;
if (parent != null)
{
parent.UpdateCacheCounters();
evt.Session.Save(parent);
}
}
}
非常感谢任何帮助。
答案 0 :(得分:13)
Type type = evt.Entity.GetType();
if(
type.IsGenericType &&
type.GetGenericTypeDefinition() == typeof(IChild<>)
)
试试这个。根据{{3}}:
InvalidOperationException:当前 type不是泛型类型。那是, IsGenericType返回false。