NHibernate 执行内嵌类(Nested Class)查询
为了使用NHibernate执行内嵌类查询,我修改了NHibernate的源代码,增加了两个语句。
/*SessionFactoryImpl.cs*/
/// <summary>
///
/// </summary>
/// <param name="clazz"></param>
/// <returns></returns>
public string[ ] GetImplementors( System.Type clazz )
{
ArrayList results = new ArrayList();
foreach( IClassPersister p in classPersisters.Values )
{
if( p is IQueryable )
{
IQueryable q = ( IQueryable ) p;
string name = q.ClassName;
![](/Images/OutliningIndicators/None.gif)
if(name.IndexOf("+")!=-1)
name = name.Replace("+","..");
![](/Images/OutliningIndicators/None.gif)
bool isMappedClass = clazz.Equals( q.MappedClass );
if( q.IsExplicitPolymorphism )
{
if( isMappedClass )
{
return new string[ ] {name};
}
}
else
{
if( isMappedClass )
{
results.Add( name );
}
else if(
clazz.IsAssignableFrom( q.MappedClass ) &&
( !q.IsInherited || !clazz.IsAssignableFrom( q.MappedSuperclass ) ) )
{
results.Add( name );
}
}
}
}
return ( string[ ] ) results.ToArray( typeof( string ) );
}
![](/Images/OutliningIndicators/None.gif)
/// <summary>
///
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public string GetImportedClassName( string name )
{
// UPDATE_NOTES:resolve nested class problem
if(name.IndexOf("..")!=-1)
name = name.Replace("..","+");
![](/Images/OutliningIndicators/None.gif)
string result = imports[ name ] as string;
return ( result == null ) ? name : result;
}
现在可以在表达式中用 ParentClass..NestedCalss语法来执行查询了。
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
现在可以在表达式中用 ParentClass..NestedCalss语法来执行查询了。