Beispiel #1
0
 private static void MapList <TParent, TElement>(IClassMapper <TParent> rc, Expression <Func <TParent, IEnumerable <TElement> > > expression, CollectionFetchMode fetchMode = null, Action <IBagPropertiesMapper <TParent, TElement> > mapper = null) where TParent : class
 {
     rc.Bag(
         expression,
         m =>
     {
         m.Key(
             km =>
         {
             km.Column(
                 ckm =>
             {
                 ckm.Name("ParentId");
             });
             km.ForeignKey("none");
         });
         m.Cascade(Mapping.ByCode.Cascade.All);
         if (fetchMode != null)
         {
             m.Fetch(fetchMode);
         }
         mapper?.Invoke(m);
     },
         a => a.OneToMany());
 }
Beispiel #2
0
 void DetailCollectionCustomization(IClassMapper <DetailCollection> ca)
 {
     ca.Table(tablePrefix + "DetailCollection");
     ca.Lazy(false);
     ca.Cache(cm => { cm.Usage(CacheUsage.NonstrictReadWrite); cm.Region(cacheRegion); });
     ca.Id(x => x.ID, cm => { cm.Generator(Generators.Native); });
     ca.ManyToOne(x => x.EnclosingItem, cm => { cm.Column("ItemID"); cm.Fetch(FetchKind.Select); cm.Lazy(LazyRelation.Proxy); });
     ca.Property(x => x.Name, cm => { cm.Length(50); cm.NotNullable(true); });
     ca.Bag(x => x.Details, cm =>
     {
         cm.Key(k => k.Column("DetailCollectionID"));
         cm.Inverse(true);
         cm.Cascade(Cascade.All | Cascade.DeleteOrphans);
         cm.Lazy(CollectionLazy.Lazy);
         cm.Fetch(CollectionFetchMode.Select);
         cm.Cache(m => { m.Usage(CacheUsage.NonstrictReadWrite); m.Region(cacheRegion); });
     }, cr => cr.OneToMany());
 }
Beispiel #3
0
        /// <summary>
        /// ManyToMany设置
        /// </summary>
        /// <typeparam name="X">Entity类型泛型</typeparam>
        /// <typeparam name="T">参数类型泛型</typeparam>
        /// <param name="inputValue">输入的Mapper</param>
        /// <param name="inputBag">输入的表达式参数</param>
        private static void BagManyToMany <X, T>(IClassMapper <X> inputValue, Expression <Func <X, IEnumerable <T> > > inputBag, bool ifInVerse)
            where X : BaseEntity
        {
            var  useThisType    = typeof(X);
            var  useAnotherType = typeof(T);
            bool useifInVerse   = ifInVerse;

            //利用Hash值进行计算
            if (useThisType.GetHashCode() < useAnotherType.GetHashCode())
            {
                useifInVerse = false;
            }
            else if (useThisType.GetHashCode() > useAnotherType.GetHashCode())
            {
                useifInVerse = true;
            }


            inputValue.Bag <T>(inputBag, bag =>
                               { bag.Key(c => c.Column(useThisType.Name)); bag.Cascade(Cascade.All);
                                 bag.Inverse(useifInVerse); bag.Cache(k => k.Usage(CacheUsage.ReadWrite)); }, mapper => mapper.ManyToMany(c => c.Column(useAnotherType.Name)));
        }
		void DetailCollectionCustomization(IClassMapper<DetailCollection> ca)
		{
			ca.Table(tablePrefix + "DetailCollection");
			ca.Lazy(false);
			ca.Cache(cm => { cm.Usage(CacheUsage.NonstrictReadWrite); cm.Region(cacheRegion); });
			ca.Id(x => x.ID, cm => { cm.Generator(Generators.Native); });
			ca.ManyToOne(x => x.EnclosingItem, cm => { cm.Column("ItemID"); cm.Fetch(FetchKind.Select); cm.Lazy(LazyRelation.Proxy); });
			ca.Property(x => x.Name, cm => { cm.Length(50); cm.NotNullable(true); });
			ca.Bag(x => x.Details, cm =>
			{
				cm.Key(k => k.Column("DetailCollectionID"));
				cm.Inverse(true);
				cm.Cascade(Cascade.All | Cascade.DeleteOrphans);
				cm.Lazy(CollectionLazy.Lazy);
				cm.Fetch(CollectionFetchMode.Select);
				cm.Cache(m => { m.Usage(CacheUsage.NonstrictReadWrite); m.Region(cacheRegion); });
			}, cr => cr.OneToMany());
		}
		void ContentItemCustomization(IClassMapper<ContentItem> ca)
		{
			ca.Table(tablePrefix + "Item");
			ca.Lazy(false);
			ca.Cache(cm => { cm.Usage(CacheUsage.NonstrictReadWrite); cm.Region(cacheRegion); });
			ca.Id(x => x.ID, cm => { cm.Generator(Generators.Native); });
			ca.Discriminator(cm => { cm.Column("Type"); cm.Type(NHibernateUtil.String); });
			ca.Property(x => x.Created, cm => { });
			ca.Property(x => x.Published, cm => { });
			ca.Property(x => x.Updated, cm => { });
			ca.Property(x => x.Expires, cm => { });
			ca.Property(x => x.Name, cm => { cm.Length(250); });
			ca.Property(x => x.ZoneName, cm => { cm.Length(50); });
			ca.Property(x => x.TemplateKey, cm => { cm.Length(50); });
			ca.Property(x => x.TranslationKey, cm => { });
			ca.Property(x => x.Title, cm => { cm.Length(250); });
			ca.Property(x => x.SortOrder, cm => { });
			ca.Property(x => x.Visible, cm => { });
			ca.Property(x => x.SavedBy, cm => { cm.Length(50); });
			ca.Property(x => x.State, cm => { });
			ca.Property(x => x.ChildState, cm => { });
			ca.Property(x => x.AncestralTrail, cm => { cm.Length(100); });
			ca.Property(x => x.VersionIndex, cm => { });
			ca.Property(x => x.AlteredPermissions, cm => { });
			//ca.ManyToOne(x => x.VersionOf, cm => { cm.Column("VersionOfID"); cm.Lazy(LazyRelation.Proxy); cm.Fetch(FetchKind.Select); });
			//ca.Property(x => x.VersionOf, cm =>
			//{
			//    cm.Column("VersionOfID");
			//    cm.Type<ContentRelationFactory>();
			//});
			ca.Component(x => x.VersionOf, cm =>
			{
				cm.Property(cr => cr.ID, pm => pm.Column("VersionOfID"));
			});
			ca.ManyToOne(x => x.Parent, cm => { cm.Column("ParentID"); cm.Lazy(LazyRelation.Proxy); cm.Fetch(FetchKind.Select); });
			ca.Bag(x => x.Children, cm =>
			{
				cm.Key(k => k.Column("ParentID"));
				cm.Inverse(true);
				cm.Type<ContentItemListFactory<ContentItem>>();
				cm.Cascade(childrenCascade);
				cm.OrderBy(ci => ci.SortOrder);
				cm.Lazy(childrenLaziness);
				if (childrenBatch)
					cm.BatchSize(batchSize ?? 10);
				cm.Cache(m => { m.Usage(CacheUsage.NonstrictReadWrite); m.Region(cacheRegion); });
			}, cr => cr.OneToMany());
			ca.Bag(x => x.Details, cm =>
			{
				cm.Key(k => k.Column("ItemID"));
				cm.Inverse(true);
				cm.Type<ContentListFactory<ContentDetail>>();
				cm.Cascade(Cascade.All | Cascade.DeleteOrphans);
				cm.Fetch(CollectionFetchMode.Select);
				cm.Lazy(CollectionLazy.Lazy);
				cm.BatchSize(batchSize ?? 10);
				cm.Cache(m => { m.Usage(CacheUsage.NonstrictReadWrite); m.Region(cacheRegion); });
				cm.Where("DetailCollectionID IS NULL");
			}, cr => cr.OneToMany());
			ca.Bag(x => x.DetailCollections, cm =>
			{
				cm.Key(k => k.Column("ItemID"));
				cm.Inverse(true);
				cm.Type<ContentListFactory<DetailCollection>>();
				cm.Cascade(Cascade.All | Cascade.DeleteOrphans);
				cm.Fetch(CollectionFetchMode.Select);
				cm.Lazy(CollectionLazy.Lazy);
				cm.BatchSize(batchSize ?? 10);
				cm.Cache(m => { m.Usage(CacheUsage.NonstrictReadWrite); m.Region(cacheRegion); });
			}, cr => cr.OneToMany());
			ca.Bag(x => x.AuthorizedRoles, cm =>
			{
				cm.Key(k => k.Column("ItemID"));
				cm.Inverse(true);
				cm.Cascade(Cascade.All | Cascade.DeleteOrphans);
				cm.Fetch(CollectionFetchMode.Select);
				cm.Lazy(CollectionLazy.Lazy);
				cm.BatchSize(batchSize ?? 25);
				cm.Cache(m => { m.Usage(CacheUsage.NonstrictReadWrite); m.Region(cacheRegion); });
			}, cr => cr.OneToMany());
		}
Beispiel #6
0
 void ContentItemCustomization(IClassMapper <ContentItem> ca)
 {
     ca.Table(tablePrefix + "Item");
     ca.Lazy(false);
     ca.Cache(cm => { cm.Usage(CacheUsage.NonstrictReadWrite); cm.Region(cacheRegion); });
     ca.Id(x => x.ID, cm => { cm.Generator(Generators.Native); });
     ca.Discriminator(cm => { cm.Column("Type"); cm.Type(NHibernateUtil.String); });
     ca.Property(x => x.Created, cm => { });
     ca.Property(x => x.Published, cm => { });
     ca.Property(x => x.Updated, cm => { });
     ca.Property(x => x.Expires, cm => { });
     ca.Property(x => x.Name, cm => { cm.Length(250); });
     ca.Property(x => x.ZoneName, cm => { cm.Length(50); });
     ca.Property(x => x.TemplateKey, cm => { cm.Length(50); });
     ca.Property(x => x.TranslationKey, cm => { });
     ca.Property(x => x.Title, cm => { cm.Length(250); });
     ca.Property(x => x.SortOrder, cm => { });
     ca.Property(x => x.Visible, cm => { });
     ca.Property(x => x.SavedBy, cm => { cm.Length(50); });
     ca.Property(x => x.State, cm => { });
     ca.Property(x => x.ChildState, cm => { });
     ca.Property(x => x.AncestralTrail, cm => { cm.Length(100); });
     ca.Property(x => x.VersionIndex, cm => { });
     ca.Property(x => x.AlteredPermissions, cm => { });
     //ca.ManyToOne(x => x.VersionOf, cm => { cm.Column("VersionOfID"); cm.Lazy(LazyRelation.Proxy); cm.Fetch(FetchKind.Select); });
     //ca.Property(x => x.VersionOf, cm =>
     //{
     //    cm.Column("VersionOfID");
     //    cm.Type<ContentRelationFactory>();
     //});
     ca.Component(x => x.VersionOf, cm =>
     {
         cm.Property(cr => cr.ID, pm => pm.Column("VersionOfID"));
     });
     ca.ManyToOne(x => x.Parent, cm => { cm.Column("ParentID"); cm.Lazy(LazyRelation.Proxy); cm.Fetch(FetchKind.Select); });
     ca.Bag(x => x.Children, cm =>
     {
         cm.Key(k => k.Column("ParentID"));
         cm.Inverse(true);
         cm.Type <ContentItemListFactory <ContentItem> >();
         cm.Cascade(childrenCascade);
         cm.OrderBy(ci => ci.SortOrder);
         cm.Lazy(childrenLaziness);
         if (childrenBatch)
         {
             cm.BatchSize(batchSize ?? 10);
         }
         cm.Cache(m => { m.Usage(CacheUsage.NonstrictReadWrite); m.Region(cacheRegion); });
     }, cr => cr.OneToMany());
     ca.Bag(x => x.Details, cm =>
     {
         cm.Key(k => k.Column("ItemID"));
         cm.Inverse(true);
         cm.Type <ContentListFactory <ContentDetail> >();
         cm.Cascade(Cascade.All | Cascade.DeleteOrphans);
         cm.Fetch(CollectionFetchMode.Select);
         cm.Lazy(CollectionLazy.Lazy);
         cm.BatchSize(batchSize ?? 10);
         cm.Cache(m => { m.Usage(CacheUsage.NonstrictReadWrite); m.Region(cacheRegion); });
         cm.Where("DetailCollectionID IS NULL");
     }, cr => cr.OneToMany());
     ca.Bag(x => x.DetailCollections, cm =>
     {
         cm.Key(k => k.Column("ItemID"));
         cm.Inverse(true);
         cm.Type <DetailCollectionFactory>();
         cm.Cascade(Cascade.All | Cascade.DeleteOrphans);
         cm.Fetch(CollectionFetchMode.Select);
         cm.Lazy(CollectionLazy.Lazy);
         cm.BatchSize(batchSize ?? 10);
         cm.Cache(m => { m.Usage(CacheUsage.NonstrictReadWrite); m.Region(cacheRegion); });
     }, cr => cr.OneToMany());
     ca.Bag(x => x.AuthorizedRoles, cm =>
     {
         cm.Key(k => k.Column("ItemID"));
         cm.Inverse(true);
         cm.Cascade(Cascade.All | Cascade.DeleteOrphans);
         cm.Fetch(CollectionFetchMode.Select);
         cm.Lazy(CollectionLazy.Lazy);
         cm.BatchSize(batchSize ?? 25);
         cm.Cache(m => { m.Usage(CacheUsage.NonstrictReadWrite); m.Region(cacheRegion); });
     }, cr => cr.OneToMany());
 }
Beispiel #7
0
 /// <summary>
 /// 代理执行Bag方法 (one - Many 对照)
 /// </summary>
 /// <typeparam name="X">Entity类型泛型</typeparam>
 /// <typeparam name="T">参数类型泛型</typeparam>
 /// <param name="inputValue">输入的Mapper</param>
 /// <param name="inputBag">输入的表达式参数</param>
 private static void Bag <X, T>(IClassMapper <X> inputValue, Expression <Func <X, IEnumerable <T> > > inputBag)
     where X : BaseEntity
 {
     inputValue.Bag <T>(inputBag, bag => { bag.Cascade(Cascade.All); bag.Inverse(true); bag.Cache(k => k.Usage(CacheUsage.ReadWrite)); });
 }