Вопрос

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 can'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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top