예제 #1
0
        /// <summary>Generates subclasses nhibernate xml configuration as an alternative to NHibernate definition file and adds them to the configuration.</summary>
        /// <param name="cfg">The nhibernate configuration to build.</param>
        protected virtual void GenerateMappings(NHibernate.Cfg.Configuration cfg)
        {
            Debug.Write("Adding");
            StringBuilder mappings = new StringBuilder(mappingStartTag);

            var definitions = definitionProviders.SelectMany(dp => dp.GetDefinitions()).ToList();
            var allTypes    = definitions
                              .Select(d => d.ItemType)
                              .SelectMany(t => Utility.GetBaseTypesAndSelf(t))
                              .Distinct()
                              .Where(t => t.IsSubclassOf(typeof(ContentItem)))
                              .OrderBy(t => Utility.InheritanceDepth(t))
                              .ToList();

            foreach (var type in allTypes)
            {
                string discriminator = type.Name;
                var    definition    = definitions.FirstOrDefault(d => d.ItemType == type);
                if (definition != null)
                {
                    discriminator = definition.Discriminator ?? discriminator;
                }

                string classMapping = generator.GetMapping(type, type.BaseType, discriminator);
                mappings.Append(classMapping);
            }

            mappings.Append(mappingEndTag);
            cfg.AddXml(FormatMapping(mappings.ToString()));
        }
        public void UpdateConfiguration(Configuration configuration, IMapping mapping = null)
        {
            var document = BuildMappingDocument(configuration, mapping);

            configuration.AddXml(document.ToString());

            VersionedPersistentClass = configuration.ClassMappings.First(c => c.EntityName == VersionedEntityName);
        }
예제 #3
0
 protected virtual void AddDefaultMapping(NHibernate.Cfg.Configuration cfg)
 {
     using (Stream stream = GetStreamFromName(DefaultMapping))
         using (StreamReader reader = new StreamReader(stream))
         {
             string mappingXml = reader.ReadToEnd();
             mappingXml = FormatMapping(mappingXml);
             cfg.AddXml(mappingXml);
         }
 }
예제 #4
0
        /// <summary>Adds mappings to the configuration.</summary>
        /// <param name="cfg">The configuration to add the mappings to.</param>
        /// <param name="name">The resource name of the embedded resource.</param>
        protected virtual void AddMapping(NHibernate.Cfg.Configuration cfg, string name)
        {
            if (!string.IsNullOrEmpty(name))
            {
                using (Stream stream = GetStreamFromName(name))
                {
                    if (stream == null)
                    {
                        throw new ArgumentException("Could not read stream from embedded resource '" + name + "'", "name");
                    }

                    using (StreamReader reader = new StreamReader(stream))
                    {
                        string mappingXml = reader.ReadToEnd();
                        mappingXml = FormatMapping(mappingXml);
                        cfg.AddXml(mappingXml);
                    }
                }
            }
        }
예제 #5
0
        public ConfigurationBuilder(IContentTypeManager definitions, DatabaseSection databaseSectionConfig)
        {
            _definitions = definitions;

            if (databaseSectionConfig == null)
                databaseSectionConfig = new DatabaseSection();

            var configuration = MsSqlConfiguration.MsSql2008
                //.ConnectionString(c => c.FromConnectionStringWithKey(databaseSectionConfig.ConnectionStringName))
                .Cache(c => c.ProviderClass(databaseSectionConfig.CacheProviderClass));

            if (databaseSectionConfig.CacheEnabled)
                configuration = configuration.Cache(c => c.UseQueryCache());

            IDictionary<string, string> properties = configuration.ToProperties();
            properties["cache.use_second_level_cache"] = databaseSectionConfig.CacheEnabled.ToString();
            properties["connection.connection_string_name"] = databaseSectionConfig.ConnectionStringName;

            //ZeusPersistenceModel persistenceModel = new ZeusPersistenceModel();
            //persistenceModel.Mappings.(DefaultLazy.AlwaysTrue());

            _configuration = new NHibernate.Cfg.Configuration().AddProperties(properties);

            AddMapping(_configuration, "Zeus.Persistence.NH.Mappings.Default.hbm.xml");
            //_configuration.AddAssembly(Assembly.GetExecutingAssembly());

            //persistenceModel.Configure(_configuration);

            //persistenceModel.WriteMappingsTo(@"C:\mappings");

            // For each definition, add a <subclass> element to mapping file.
            StringBuilder mappings = new StringBuilder();
            foreach (Type type in EnumerateDefinedTypes())
            {
                string format = (typeof(WidgetContentItem) == type) ? _widgetClassFormat : _classFormat;
                mappings.AppendFormat(format, GetName(type), GetName(type.BaseType), GetDiscriminator(type));
            }
            string configurationXml = string.Format(_mappingFormat, mappings);
            _configuration.AddXml(configurationXml);
        }
예제 #6
0
        /// <summary>
        /// 创建StatelessDbSession对象
        /// </summary>
        /// <param name="connectionString">连接字符串</param>
        /// <param name="dbDialectProvider">数据库特性对象提供程序</param>
        /// <param name="mappingXml">实体关系映射配置Xml文本</param>
        /// <returns>返回StatelessDbSession对象</returns>
        public virtual StatelessDbSession CreateStatelessDbSession(string connectionString, IDbDialectProvider dbDialectProvider, string mappingXml)
        {
            ISessionFactory sf = null;
            while (!sessionFactories.TryGetValue(connectionString, out sf))
            {
                IDictionary<string, string> dbSetting = new Dictionary<string, string>
                {
                    ["dialect"] = dbDialectProvider.DialectName,
                    ["connection.connection_string"] = connectionString,
                };
                CustomizeNHSessionFactory(dbSetting);
                var x = new NHibernate.Cfg.Configuration();
                x = x.AddProperties(dbSetting);
                //允许采用配置文件修改NHibernate配置
                var hc = ConfigurationManager.GetSection(CfgXmlHelper.CfgSectionName) as NHibernate.Cfg.IHibernateConfiguration;
                if ((hc != null && hc.SessionFactory != null) || File.Exists(GetDefaultConfigurationFilePath()))
                {
                    x = x.Configure();
                }
                if (System.Transactions.Transaction.Current != null)
                {
                    //如果在分布式事务范围内,就将连接释放模式更改为on_close模式,防止auto模式下,重新获取连接,导致分布式事务升级
                    x.AddProperties(new Dictionary<string, string> {["connection.release_mode"] = "on_close" });
                }
                //添加实体关系映射
                if (!string.IsNullOrWhiteSpace(mappingXml))
                {
                    x.AddXml(mappingXml);
                }

                sf = x.BuildSessionFactory();
                sessionFactories.TryAdd(connectionString, sf);
            }
            return new StatelessDbSession(sf, connectionString);
        }