예제 #1
0
파일: BaseMap.cs 프로젝트: quintonn/QBic
        public static void MapLists <T>(this ClasslikeMapBase <T> dynamicMap, IList <PropertyInfo> listColumns) where T : DynamicClass
        {
            var tableName = typeof(T).Name.Split(".".ToCharArray()).Last();

            foreach (var column in listColumns)
            {
                var method = typeof(FluentNHibernate.Reveal).GetMethods().Where(m => m.Name == "Member").Last();

                var genericType = column.PropertyType.GenericTypeArguments.First();

                var listType = typeof(IEnumerable <>).MakeGenericType(new[] { genericType });
                var generic  = method.MakeGenericMethod(typeof(T), listType);

                dynamic tmp = generic.Invoke(dynamicMap, new object[] { column.Name });

                //HasMany<object>(x => x.Id).KeyColumn("").Inverse().AsSet();  // for intellisense

                dynamicMap.HasMany(tmp).KeyColumn(tableName + "_id").Inverse().AsSet().Not.LazyLoad();//.Cascade.None();
            }
        }
예제 #2
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 MapOneToManyImplementation <T, TChild>(ClasslikeMapBase <T> mapping, PropertyInfo property, Ownership ownership)
        {
            var part = mapping.HasMany <TChild>(CreateCollectionExpression <T, TChild>(property));

            part.KeyColumn(typeof(T).Name + "ID");
            switch (ownership)
            {
            case Ownership.Exclusive:
                part.Cascade.All();
                break;

            case Ownership.None:
                part.Cascade.None();
                break;

            case Ownership.Shared:
            default:
                part.Cascade.AllDeleteOrphan();
                break;
            }
            //part.ForeignKeyConstraintName("FK_" + typeof(T).Name + "_" + typeof(TChild).Name);
        }
예제 #3
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);
        }