⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mappingrootbinder.cs

📁 NHibernate NET开发者所需的
💻 CS
字号:
using System.Xml;

using NHibernate.Cfg.MappingSchema;
using NHibernate.Engine;
using NHibernate.Mapping;
using NHibernate.Util;

namespace NHibernate.Cfg.XmlHbmBinding
{
	public class MappingRootBinder : Binder
	{
		private readonly XmlNamespaceManager namespaceManager;
		private readonly Dialect.Dialect dialect;

		public MappingRootBinder(Mappings mappings, XmlNamespaceManager namespaceManager,
			Dialect.Dialect dialect)
			: base(mappings)
		{
			this.namespaceManager = namespaceManager;
			this.dialect = dialect;
		}

		public void Bind(XmlNode node)
		{
			HbmMapping mappingSchema = Deserialize<HbmMapping>(node);

			SetMappingsProperties(mappingSchema);
			AddFilterDefinitions(mappingSchema);

			AddRootClasses(node);
			AddSubclasses(node);
			AddJoinedSubclasses(node);
			AddUnionSubclasses(node);

			AddQueries(mappingSchema);
			AddSqlQueries(mappingSchema);
			AddImports(mappingSchema);
			AddAuxiliaryDatabaseObjects(mappingSchema);
			AddResultSetMappingDefinitions(mappingSchema);
		}

		private void SetMappingsProperties(HbmMapping mappingSchema)
		{
			mappings.SchemaName = mappingSchema.schema;
			mappings.DefaultCascade = mappingSchema.defaultcascade;
			mappings.DefaultAccess = mappingSchema.defaultaccess;
			mappings.DefaultLazy = mappingSchema.defaultlazy;
			mappings.IsAutoImport = mappingSchema.autoimport;
			mappings.DefaultNamespace = mappingSchema.@namespace ?? mappings.DefaultNamespace;
			mappings.DefaultAssembly = mappingSchema.assembly ?? mappings.DefaultAssembly;
		}

		private void AddFilterDefinitions(HbmMapping mappingSchema)
		{
			foreach (HbmFilterDef filterDefSchema in mappingSchema.ListFilterDefs())
			{
				FilterDefinition definition = FilterDefinitionFactory.CreateFilterDefinition(filterDefSchema);
				mappings.AddFilterDefinition(definition);
			}
		}

		private void AddRootClasses(XmlNode parentNode)
		{
			RootClassBinder binder = new RootClassBinder(this, namespaceManager, dialect);

			foreach (XmlNode node in parentNode.SelectNodes(HbmConstants.nsClass, namespaceManager))
				binder.Bind(node, Deserialize<HbmClass>(node));
		}

		private void AddUnionSubclasses(XmlNode parentNode)
		{
			UnionSubclassBinder binder = new UnionSubclassBinder(this, namespaceManager, dialect);

			foreach (XmlNode node in parentNode.SelectNodes(HbmConstants.nsUnionSubclass, namespaceManager))
				binder.Bind(node);
		}

		private void AddJoinedSubclasses(XmlNode parentNode)
		{
			JoinedSubclassBinder binder = new JoinedSubclassBinder(this, namespaceManager, dialect);

			foreach (XmlNode node in parentNode.SelectNodes(HbmConstants.nsJoinedSubclass, namespaceManager))
				binder.Bind(node);
		}

		private void AddSubclasses(XmlNode parentNode)
		{
			SubclassBinder binder = new SubclassBinder(this, namespaceManager, dialect);

			foreach (XmlNode node in parentNode.SelectNodes(HbmConstants.nsSubclass, namespaceManager))
				binder.Bind(node);
		}

		private void AddQueries(HbmMapping mappingSchema)
		{
			NamedQueryBinder binder = new NamedQueryBinder(this);

			foreach (object item in mappingSchema.Items1 ?? new object[0])
			{
				HbmQuery querySchema = item as HbmQuery;

				if (querySchema != null)
					binder.AddQuery(querySchema);
			}
		}

		private void AddSqlQueries(HbmMapping mappingSchema)
		{
			NamedSQLQueryBinder binder = new NamedSQLQueryBinder(this);

			foreach (object item in mappingSchema.Items1 ?? new object[0])
			{
				HbmSqlQuery sqlQuerySchema = item as HbmSqlQuery;

				if (sqlQuerySchema != null)
					binder.AddSqlQuery(sqlQuerySchema);
			}
		}

		public void AddImports(HbmMapping mappingSchema)
		{
			foreach (HbmImport importSchema in mappingSchema.import ?? new HbmImport[0])
			{
				string fullClassName = FullClassName(importSchema.@class, mappings);
				string rename = importSchema.rename ?? StringHelper.GetClassname(fullClassName);

				log.DebugFormat("Import: {0} -> {1}", rename, fullClassName);
				mappings.AddImport(fullClassName, rename);
			}
		}

		private void AddAuxiliaryDatabaseObjects(HbmMapping mappingSchema)
		{
			foreach (HbmDatabaseObject objectSchema in mappingSchema.ListDatabaseObjects())
			{
				IAuxiliaryDatabaseObject dbObject = AuxiliaryDatabaseObjectFactory.Create(mappings, objectSchema);
				mappings.AddAuxiliaryDatabaseObject(dbObject);
			}
		}

		private void AddResultSetMappingDefinitions(HbmMapping mappingSchema)
		{
			ResultSetMappingBinder binder = new ResultSetMappingBinder(this);

			foreach (HbmResultSet resultSetSchema in mappingSchema.resultset ?? new HbmResultSet[0])
			{
				// Do not inline this variable or the anonymous method will not work correctly.
				HbmResultSet tempResultSetSchema = resultSetSchema;

				mappings.AddSecondPass(delegate
					{
						ResultSetMappingDefinition definition = binder.Create(tempResultSetSchema);
						mappings.AddResultSetMapping(definition);
					});
			}
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -