• nhibernate GetType


    本原理
    
    /* This code assumes an IEntity interface that identifies your persistent types. */      
        /// <summary> 
        /// This static class provides common extension methods for <see cref="IEntity"/> types. 
        /// </summary> 
       public static class EntityExtensions {   
        /// <summary> 
        /// Gets the real, underlying Entity-type - as opposed to the standard GetType() method, 
        /// this method takes into account the possibility that the object may in fact be an 
        /// NHibernate Proxy object, and not a real object. This method will return the real 
        /// Entity-type, doing a full initialization if necessary. 
        /// </summary> 
        public static Type GetEntityType(this IEntity entity ) {     
            if(entity is INHibernateProxy)           
            {
    
                var lazyInitialiser = ((INHibernateProxy)entity).HibernateLazyInitializer;
                var type = lazyInitialiser.PersistentClass;
                if( type.IsAbstract || type.GetNestedTypes().Length >0 )
                    return Unproxy ( entity ).GetType ();
                else // we don't need to "unbox" the Proxy-object to get the type
                    return lazyInitialiser.PersistentClass ;
            }
            return entity.GetType ();
        }
           /// <summary>
           /// Based on the real, underlying Entity-type, this method returns true if the specified
           /// type matches (or is assignable from) the specified Type.
           /// </summary>
        public static bool Is < TEntity >( this IEntity entity )  where TEntity : class , IEntity
        {
            var entityType = entity.GetEntityType ();
            var type = typeof ( TEntity );
            return entityType == type || type.IsAssignableFrom ( entityType );
        }
    
          /// <summary>
          /// In some cases, you may need the actual object, not just the type - for example, if
          /// you're going to cast to a type deeper in the hierarchy, you may need to Unproxy
          /// the object first.
          /// </summary>
        public static TEntity Unproxy < TEntity >( this TEntity entity ) where TEntity : class , IEntity
            {
             return entity is INHibernateProxy ? (TEntity)Service.Session.GetSessionImplementation ().PersistenceContext.Unproxy(entity ):entity ;
            } 
         }
  • 相关阅读:
    scrapy模拟用户登录
    我为什么选择Vim
    关于72键配列键盘的想法
    vim配图
    解决一些python的问题记录
    ros资料记录,详细阅读
    C语言的历史
    将制定目录家到系统PATH环境变量中
    让vim更加智能化
    如何自定义路径
  • 原文地址:https://www.cnblogs.com/kexb/p/6041123.html
Copyright © 2020-2023  润新知