2010-10-19 45 views
9

Tôi có một đoạn mã cần kiểm tra một thực thể khi được lưu bởi Kho lưu trữ của tôi. Tôi có một đánh chặn NHibernate trên lưu để kiểm tra điều này, nhưng khi tôi gọi là GetGenericTypeDefinition chức năng mã không thành công với các lỗi:Tại sao GetGenericTypeDefinition không thành công?

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

Mã là thế này:

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

Bất kỳ trợ giúp sẽ được nhiều đánh giá cao.

+1

Bạn có thể xem liệu evt.Entity.GetType() có bị lỗi không? Nó sẽ giúp biết chính xác những gì gọi hàm không thành công trong ví dụ này. Ngoại lệ không giống như một ngoại lệ được trả về từ GetGenericTypeDefinition(). –

+0

Nó không thất bại để có được evt.Entity.GetType() – Richard

Trả lời

12
Type type = evt.Entity.GetType(); 
if(
    type.IsGenericType && 
    type.GetGenericTypeDefinition() == typeof(IChild<>) 
) 

dùng thử. theo số 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.

+0

Cảm ơn. Rõ ràng bây giờ bạn đã chỉ cho tôi nhưng chỉ không nhìn thấy nó. Đánh giá cao sự trợ giúp. – Richard

Các vấn đề liên quan