nhibernate GetType

Posted 听哥哥的话

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 ;
        } 
     }

 

以上是关于nhibernate GetType的主要内容,如果未能解决你的问题,请参考以下文章

NHibernate 通过代码 ManyToOne 与 CompositeIdentity 进行映射

NHibernate OneToMany 代码映射

代码优先实体框架或 NHibernate

如何通过代码将 Id 映射到 NHibernate 映射中的私有支持字段?

NHibernate 和代码优先

通过代码进行 Nhibernate 一对一映射