views:

24

answers:

1

I have a piece of code which needs to check an entity when being saved by my Repository. I have an NHibernate interceptor on the save to check this but when I call the GetGenericTypeDefinition function the code fails with the error:

[InvalidOperationException: Operation is not valid due to the current state of the object.] System.RuntimeType.GetGenericTypeDefinition() +7525641

Code is this:

 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);
                }
            }
}

Any help would be much appreciated.

+1  A: 
Type type = evt.Entity.GetType();
if(
    type.IsGenericType && 
    type.GetGenericTypeDefinition() == typeof(IChild<>)
)

try this. according to http://msdn.microsoft.com/en-us/library/system.type.getgenerictypedefinition.aspx:

InvalidOperationException: The current type is not a generic type. That is, IsGenericType returns false.

Andrey
Thanks. Obvious now you have shown me but was just not seeing it. Appreciate the help.
Richard