How do I generate xml mappings files as part of my tests in MappingIntegrationTests
I need to manually check if the fluent mappings correlate to the mappings in the leagcy project.
You can do something like:
config.Mappings(m =>
{
m.FluentMappings.ExportTo("...file path here...");
m.HbmMappings.ExportTo("...file path here...");
m.AutoMappings.ExportTo("...file path here...");
{
);
I don't like it myself. If I find some better way (if such exists at all) I'll update the answer.
See
http://blog.jagregory.com/2009/02/03/fluent-nhibernate-configuring-your-application/
Or if broken, see this instead
https://github.com/jagregory/fluent-nhibernate/wiki/Database-configuration
You generate XML mappings by calling the ExportTo() method.
For example:
ISessionFactory sessionFactory = FluentNHibernate.Cfg.Fluently.Configure()
.Database(FluentNHibernate.Cfg.Db.MsSqlConfiguration.MsSql2008
.ConnectionString(connectionString)
)
.Mappings(m => m.FluentMappings.AddFromAssembly(assembly)
.ExportTo(@"C:\your\export\path")
)
.BuildSessionFactory();
See here for documentation:
I use (almost) this extension method to get the xbm in memory so I can view it in my test project:
public static IDictionary<string, string> LoadHBM(this FluentConfiguration cfg)
{
var result = new Dictionary<string, string>();
var mem = new MemoryStream();
var writer = new StreamWriter(mem);
var reader = new StreamReader(mem);
cfg.Mappings(x =>
{
x.FluentMappings.ExportTo(writer);
x.AutoMappings.ExportTo(writer);
});
cfg.BuildConfiguration();
writer.Flush();
mem.Seek(0, 0);
var hbm = reader.ReadToEnd();
var objects = XElement.Parse("<junk>" + hbm + "</junk>").Elements();
objects.ToList().ForEach(x => result.Add(x.Elements().First().Attribute("name").Value, x.ToString()));
return result;
}
Edit: Updated for FNH 1.2.