Генерация XML-отображений из свободного Nhibernate - PullRequest
17 голосов
/ 10 января 2010

Как создать файлы сопоставлений xml в рамках моих тестов в MappingIntegrationTests

Мне нужно вручную проверить, соответствуют ли текучие сопоставления отображениям в проекте на гибкость.

Ответы [ 3 ]

19 голосов
/ 10 января 2010

Вы можете сделать что-то вроде:

 config.Mappings(m => 
    {
        m.FluentMappings.ExportTo("...file path here...");
        m.HbmMappings.ExportTo("...file path here...");
        m.AutoMappings.ExportTo("...file path here...");
    {
);

Мне самому не нравится. Если я найду какой-нибудь лучший способ (если такой вообще существует), я обновлю ответ.

См
http://blog.jagregory.com/2009/02/03/fluent-nhibernate-configuring-your-application/
Или, если сломан, посмотрите вместо этого
https://github.com/jagregory/fluent-nhibernate/wiki/Database-configuration

8 голосов
/ 10 января 2010

Вы генерируете сопоставления XML, вызывая метод ExportTo ().

Например:

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();

См. Здесь для документации:

http://wiki.fluentnhibernate.org/Fluent_configuration

3 голосов
/ 21 февраля 2011

Я использую (почти) этот метод расширения, чтобы получить xbm в памяти, чтобы просмотреть его в своем тестовом проекте:

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

Редактировать: Обновлено для FNH 1.2.

...