Nhibernate 使用代码映射生成HBM文件

Nhibernate 使用代码映射生成HBM文件,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,我通过代码使用NHibernate映射,并以以下方式创建会话工厂: var mapper = new ModelMapper(); mapper.AddMappings(Assembly.GetExecutingAssembly().GetExportedTypes()); HbmMapping domainMapping = mapper.CompileMappingForAllExplicitlyAddedEntities();

我通过代码使用NHibernate映射,并以以下方式创建会话工厂:

            var mapper = new ModelMapper();
        mapper.AddMappings(Assembly.GetExecutingAssembly().GetExportedTypes());

        HbmMapping domainMapping = mapper.CompileMappingForAllExplicitlyAddedEntities();

        const bool executeScript = false;

        var configuration = new Configuration();
        configuration.DataBaseIntegration(c =>
                                              {
                                                  c.Dialect<MsSql2005Dialect>();
                                                  c.ConnectionString =
                                                      ConfigurationManager.ConnectionStrings["ShopConnectionString"]
                                                          .ConnectionString;
                                                  c.KeywordsAutoImport = Hbm2DDLKeyWords.AutoQuote;
                                              });
        configuration.AddMapping(domainMapping);

         _sessionFactory = configuration.BuildSessionFactory();
var-mapper=newmodelmapper();
AddMappings(Assembly.getExecutionGassembly().GetExportedTypes());
HbmMapping domainMapping=mapper.CompileMappingForAllExplicitlyAddedEntities();
const bool executeScript=false;
var配置=新配置();
数据库集成(c=>
{
c、 方言();
c、 连接字符串=
ConfigurationManager.ConnectionString[“ShopConnectionString”]
.连接字符串;
c、 关键字sautoimport=Hbm2DDLKeyWords.AutoQuote;
});
AddMapping(domainMapping);
_sessionFactory=configuration.BuildSessionFactory();
我需要得到相应的HBM文件

我如何才能做到这一点?

有两种方法:-

//This will write all the XML into the bin/mappings folder  
mapper.CompileMappingForEachExplicitlyAddedEntity().WriteAllXmlMapping();  
注意上述方法,因为当检测到bin文件夹中的更改时,asp.net应用程序将进行回收,另一种方法是:-

var mapping = mapper.CompileMappingForAllExplicitlyAddedEntities();  
//you could add a breakpoint here!   
var mappingXml = mapping.AsString();  
使用AsString()扩展方法:

domainMapping.AsString()

它将为您提供可以保存到文件中的xml。例如,您可以在构建SessionFactory之前调用该方法。

谢谢,我将映射部分提取到一个新方法,该方法返回一个HbmMapping对象。所以我可以在单元测试中使用它并调用AsString。