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

📄 nhibernatedataaccessorcreator.cs

📁 该文件是多层体系结构的数据访问层
💻 CS
字号:
#region Copyright & License
//
// $Copyright:$
//
#endregion
#region Document Information
// $Author: Bai.shijun $
// $Rev: 511 $ 
// $Date: 05-10-08 16:12 $
#endregion

using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;

using NHibernate;
using NHibernate.Cfg;
using Eai.Data;

namespace Eai.Data
{
    public class NHibernateDataAccessorCreator : DataAccessorCreatorBase
    {
        private const string FlushModePropertyName = "flush-mode";
        private Eai.Data.FlushMode flushMode = Eai.Data.FlushMode.Auto;
        
        public NHibernateDataAccessorCreator()
        {
        }

        public NHibernateDataAccessorCreator(IDataAccessorCreatorConfig config)
        {
            Config = config;
        }

        public override IDataAccessorCreatorConfig Config
        {
            get
            {
                return base.Config;
            }
            set
            {
                base.Config = value;
                LoadConfig();
            }
        }

        #region IDataAccessorCreator Members
        public override IDataAccessor Create()
        {
            return new NHibernateDataAccessor(NhConfiguration, flushMode);
        }

        #endregion

        private NHibernate.Cfg.Configuration nhConfig;
        private NHibernate.Cfg.Configuration NhConfiguration
        {
            get
            {
                return nhConfig;
            }
        }

        private void LoadConfig()
        {
            nhConfig = new NHibernate.Cfg.Configuration();
            AddProperty(nhConfig);
            // add mapping configuration.
            AddMappingConfig(nhConfig);

            if (Config.Properties.ContainsKey(FlushModePropertyName))
            {
                string flushModeStr = Config.Properties[FlushModePropertyName].ToLower();
                try
                {
                    flushMode = (Eai.Data.FlushMode)Enum.Parse(typeof(Eai.Data.FlushMode), flushModeStr, true);
                }
                catch { }
            }
        }

        /// <summary>
        /// add mapping configuration.
        /// </summary>
        private void AddMappingConfig(NHibernate.Cfg.Configuration nhConfig)
        {
            XmlNodeList nodes = Config.ConfigNode.SelectNodes("nhMappingConfig/*");
            foreach (XmlNode node in nodes)
            {
                XmlElement ele = node as XmlElement;
                if (ele == null) continue;
                if (ele.Name == "assembly")
                {
                    string assemblyName = ele.GetAttribute("name");
                    if (assemblyName == "") continue;
                    nhConfig.AddAssembly(assemblyName);
                }
            }
        }

        private void AddProperty(NHibernate.Cfg.Configuration nhConfig)
        {
            foreach (KeyValuePair<string, string> item in Config.Properties )
            {
                string key = item.Key;
                if (!key.StartsWith("hibernate", StringComparison.OrdinalIgnoreCase)) continue;
                nhConfig.Properties.Add(key, item.Value);
            }
        }

        #region only for test
#if DEBUG
        public bool ClassMappingIsExisted(Type classType)
        {
            return NhConfiguration.GetClassMapping(classType) != null;
        }
#endif
        #endregion
    }
}

⌨️ 快捷键说明

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