/// <summary> /// Implementation for late binding generic call. Shouldn't be called directly Called through reflection. /// </summary> /// <typeparam name="T"></typeparam> /// <typeparam name="TChild"></typeparam> /// <param name="mapping"></param> /// <param name="property"></param> /// <param name="ownership"></param> private static void MapManyToManyImplementation <T, TChild>(ClasslikeMapBase <T> mapping, PropertyInfo property) { var part = mapping.HasManyToMany <TChild>(CreateCollectionExpression <T, TChild>(property)); string parentName = typeof(T).Name; string childName = typeof(TChild).Name; part.Table(parentName + childName + "Xref") .ParentKeyColumn(parentName + "ID") .ChildKeyColumn(childName + "ID") .Cascade.SaveUpdate(); }
/// <summary> /// /// </summary> /// <param name="map"></param> /// <param name="hierarchyTableName"></param> /// <typeparam name="T"></typeparam> public static void TreeMap <T>(this ClasslikeMapBase <T> map, string hierarchyTableName) where T : TreeNode <T> { map.References(x => x.Parent) .LazyLoad() .Nullable() .Column("PARENT_ID"); map.HasMany(x => x.Children) .Access.ReadOnlyPropertyThroughCamelCaseField() .Cascade.All() .Inverse() .AsSet() .LazyLoad() .BatchSize(250) .KeyColumn("PARENT_ID"); map.HasManyToMany(x => x.Ancestors) .Access.ReadOnlyPropertyThroughCamelCaseField() .Cascade.None() .AsSet() .LazyLoad() .BatchSize(250) .Table(hierarchyTableName) .ParentKeyColumn("CHILD_ID") .ChildKeyColumn("PARENT_ID") .ForeignKeyConstraintNames(string.Format("FK_{0}_CHILD", hierarchyTableName), null); map.HasManyToMany(x => x.Descendants) .Access.ReadOnlyPropertyThroughCamelCaseField() .Cascade.All() .Inverse() .AsSet() .LazyLoad() .BatchSize(250) .Table(hierarchyTableName) .ParentKeyColumn("PARENT_ID") .ChildKeyColumn("CHILD_ID") .ForeignKeyConstraintNames(string.Format("FK_{0}_PARENT", hierarchyTableName), null); }