dynamicmapentitytuplizer.cs

来自「NHibernate NET开发者所需的」· CS 代码 · 共 77 行

CS
77
字号
using System;
using System.Collections;
using System.Text;
using log4net;
using NHibernate.Mapping;
using NHibernate.Properties;
using NHibernate.Proxy;
using NHibernate.Proxy.Map;

namespace NHibernate.Tuple.Entity
{
	public class DynamicMapEntityTuplizer : AbstractEntityTuplizer
	{
		private static readonly ILog log = LogManager.GetLogger(typeof(PocoEntityTuplizer));

		internal DynamicMapEntityTuplizer(EntityMetamodel entityMetamodel, PersistentClass mappingInfo)
			: base(entityMetamodel, mappingInfo) {}

		public override System.Type ConcreteProxyClass
		{
			get { return typeof(IDictionary); }
		}

		public override bool IsInstrumented
		{
			get { return false; }
		}

		public override System.Type MappedClass
		{
			get { return typeof(IDictionary); }
		}

		public override EntityMode EntityMode
		{
			get { return EntityMode.Map; }
		}

		protected internal override IGetter BuildPropertyGetter(Mapping.Property mappedProperty, PersistentClass mappedEntity)
		{
			return BuildPropertyAccessor(mappedProperty).GetGetter(null, mappedProperty.Name);
		}

		private IPropertyAccessor BuildPropertyAccessor(Mapping.Property property)
		{
			return PropertyAccessorFactory.DynamicMapPropertyAccessor;
		}

		protected internal override ISetter BuildPropertySetter(Mapping.Property mappedProperty, PersistentClass mappedEntity)
		{
			return BuildPropertyAccessor(mappedProperty).GetSetter(null, mappedProperty.Name);
		}

		protected internal override IInstantiator BuildInstantiator(PersistentClass mappingInfo)
		{
			return new DynamicMapInstantiator(mappingInfo);
		}

		protected internal override IProxyFactory BuildProxyFactory(PersistentClass mappingInfo, IGetter idGetter,
		                                                            ISetter idSetter)
		{
			IProxyFactory pf = new MapProxyFactory();
			try
			{
				//TODO: design new lifecycle for ProxyFactory
				pf.PostInstantiate(EntityName, null, null, null, null, null);
			}
			catch (HibernateException he)
			{
				log.Warn("could not create proxy factory for:" + EntityName, he);
				pf = null;
			}
			return pf;
		}
	}
}

⌨️ 快捷键说明

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