예제 #1
0
        /// <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();
        }
예제 #2
0
        /// <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);
        }