本文整理汇总了C#中IAssociationType.GetJoinable方法的典型用法代码示例。如果您正苦于以下问题:C# IAssociationType.GetJoinable方法的具体用法?C# IAssociationType.GetJoinable怎么用?C# IAssociationType.GetJoinable使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IAssociationType
的用法示例。
在下文中一共展示了IAssociationType.GetJoinable方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: WalkAssociationTree
/// <summary>
/// Add on association (one-to-one or many-to-one) to a list of associations be fetched by outerjoin (if necessary)
/// </summary>
/// <param name="type"></param>
/// <param name="aliasedForeignKeyColumns"></param>
/// <param name="persister"></param>
/// <param name="alias"></param>
/// <param name="associations"></param>
/// <param name="visitedPersisters"></param>
/// <param name="path"></param>
/// <param name="currentDepth"></param>
/// <param name="joinType"></param>
/// <param name="factory"></param>
private void WalkAssociationTree(
IAssociationType type,
string[ ] aliasedForeignKeyColumns,
IJoinable persister,
string alias,
IList associations,
ISet visitedPersisters,
string path,
int currentDepth,
JoinType joinType,
ISessionFactoryImplementor factory )
{
IJoinable joinable = type.GetJoinable( factory );
int maxFetchDepth = factory.MaximumFetchDepth;
bool enabled = ( joinType == JoinType.InnerJoin ) || (
( maxFetchDepth <= 0 || currentDepth < maxFetchDepth ) &&
!visitedPersisters.Contains( joinable ) &&
( !joinable.IsCollection || !ContainsCollectionPersister( associations ) )
);
if ( enabled )
{
visitedPersisters.Add( persister );
OuterJoinableAssociation assoc = new OuterJoinableAssociation();
associations.Add( assoc );
// After adding to collection!!
string subalias = GenerateTableAlias(
joinable.Name,
associations.Count,
path,
joinable.IsManyToMany );
assoc.Joinable = joinable;
assoc.TableName = joinable.TableName;
assoc.PrimaryKeyColumns = type.GetReferencedColumns( factory );
assoc.ForeignKeyColumns = aliasedForeignKeyColumns;
assoc.Subalias = subalias;
assoc.Owner = GetPosition( alias, associations );
assoc.IsOneToOne = type.IsEntityType &&
( (EntityType) type ).IsOneToOne &&
!( (EntityType) type ).IsUniqueKeyReference;
assoc.JoinType = joinType;
if ( assoc.ForeignKeyColumns.Length != assoc.PrimaryKeyColumns.Length ||
assoc.ForeignKeyColumns.Length == 0 )
{
throw new MappingException( string.Format( "Invalid join columns for association: {0}", path ) );
}
int nextDepth = currentDepth + 1;
if ( !joinable.IsCollection )
{
if ( joinable is IOuterJoinLoadable )
{
WalkClassTree( (IOuterJoinLoadable) joinable, subalias, associations, visitedPersisters, path, nextDepth, factory );
}
}
else
{
if ( joinable is IQueryableCollection )
{
WalkCollectionTree( (IQueryableCollection) joinable, subalias, associations, visitedPersisters, path, nextDepth, factory ) ;
}
}
}
}