/// <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); }
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); } }
/// <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); } } } }
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); }
/// <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); }