Пример #1
0
		public void HandleUnionSubclass(PersistentClass model, HbmUnionSubclass unionSubclassMapping, IDictionary<string, MetaAttribute> inheritedMetas)
		{
			var unionSubclass = new UnionSubclass(model);

			BindClass(unionSubclassMapping, unionSubclass, inheritedMetas);
			inheritedMetas = GetMetas(unionSubclassMapping, inheritedMetas, true); // get meta's from <union-subclass>

			// union subclass
			if (unionSubclass.EntityPersisterClass == null)
				unionSubclass.RootClazz.EntityPersisterClass = typeof(UnionSubclassEntityPersister);

			//table + schema names
			string schema = unionSubclassMapping.schema ?? mappings.SchemaName;
			string catalog = unionSubclassMapping.catalog ?? mappings.CatalogName;

			Table denormalizedSuperTable = unionSubclass.Superclass.Table;
			Table mytable =
				mappings.AddDenormalizedTable(schema, catalog, GetClassTableName(unionSubclass, unionSubclassMapping.table),
				                              unionSubclass.IsAbstract.GetValueOrDefault(), null, denormalizedSuperTable);
			((ITableOwner)unionSubclass).Table = mytable;

			log.InfoFormat("Mapping union-subclass: {0} -> {1}", unionSubclass.EntityName, unionSubclass.Table.Name);

			// properties
			new PropertiesBinder(mappings, unionSubclass, dialect).Bind(unionSubclassMapping.Properties, inheritedMetas);
			BindUnionSubclasses(unionSubclassMapping.UnionSubclasses, unionSubclass, inheritedMetas);

			model.AddSubclass(unionSubclass);
			mappings.AddClass(unionSubclass);
		}
		private void AddUnionSubclasses(HbmUnionSubclass unionSubclass,
		                                IDictionary<string, MetaAttribute> inheritedMetas)
		{
			var binder = new UnionSubclassBinder(Mappings, dialect);

			binder.Bind(unionSubclass, inheritedMetas);
		}
 public UnionSubclassMapper(Type subClass, HbmMapping mapDoc)
     : base(subClass, mapDoc)
 {
     classMapping = new HbmUnionSubclass();
     var toAdd = new[] { classMapping };
     classMapping.name = subClass.GetShortClassName(mapDoc);
     classMapping.extends = subClass.BaseType.GetShortClassName(mapDoc);
     mapDoc.Items = mapDoc.Items == null ? toAdd : mapDoc.Items.Concat(toAdd).ToArray();
 }
Пример #4
0
		public void Bind(HbmUnionSubclass unionSubclassMapping, IDictionary<string, MetaAttribute> inheritedMetas)
		{
			PersistentClass superModel = GetSuperclass(unionSubclassMapping.extends);
			HandleUnionSubclass(superModel, unionSubclassMapping, inheritedMetas);
		}