开发者

How to export hbm xml files using s#arparchitecture with fluent mappings

This question was asked before but the answers all show how to export the hbm files from fluentnhibernate. We are using S#arpArchitecture which wraps fluent. I am able to export the schema but what I really want is the xml files to troubleshoot errors. I've done this using FNH before but adding S#arp to the mix has complicated things where I cannot figure it out.

I've found this question asked on several forums, but I c开发者_开发技巧an't find one that shows how to get the mapping files.


Here is how I do it in one of my projects:

[TestMethod]
    public void CreateSchema()
    {
        var mappingOutput = ConfigurationManager.AppSettings["xmlMappingOutputDirectory"];
        var sqlOutput = ConfigurationManager.AppSettings["sqlOutputDirectory"];

        Configuration cfg = new Configuration().Configure();
        var persistenceModel = new PersistenceModel();
        persistenceModel.AddMappingsFromAssembly(Assembly.Load("ProjectName.Data"));
        persistenceModel.Configure(cfg);
        persistenceModel.WriteMappingsTo(mappingOutput);
        new SchemaExport(cfg).SetOutputFile(sqlOutput).Create(true, false);
    }

You will need to set the two keys in the your app config or provide values directly for them.


http://wiki.fluentnhibernate.org/Fluent_configuration#Exporting_mappings

In the Mappings call, you can do the following:

.Mappings(m =>
{
  m.FluentMappings
    .AddFromAssemblyOf<YourEntity>()
    .ExportTo(@"C:\your\export\path");

  m.AutoMappings
    .Add(/* ... */)
    .ExportTo(@"C:\your\export\path");
})


As it turns out that only works if you're not using automapping. Here's the solution if you're using automapping:

public void CanGenerateMappingFiles() 
{ 
    DirectoryInfo directoryInfo = new DirectoryInfo("../../../../db/mappings"); 

    if (!directoryInfo.Exists) 
        directoryInfo.Create(); 

    Configuration cfg = new Configuration().Configure();  
    var autoPersistenceodel = new AutoPersistenceModelGenerator().Generate(); 

    autoPersistenceodel.Configure(cfg); 
    autoPersistenceodel.AddMappingsFromAssembly(Assembly.Load("TrackerI9.Data")); 
    autoPersistenceodel.WriteMappingsTo(directoryInfo.FullName); 
} 

You'll have to make sure that your configuration is set up correctly and that you choose an appropriate location for the directory, but otherwise this should work. It did for me.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜