从流畅的Nhibernate生成XML映射

时间:2010-01-10 05:57:16

标签: nhibernate fluent-nhibernate nhibernate-mapping s#arp-architecture

如何在MappingIntegrationTests中作为测试的一部分生成xml映射文件

我需要手动检查fluent映射是否与leagcy项目中的映射关联。

3 个答案:

答案 0 :(得分:19)

您可以执行以下操作:

 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

答案 1 :(得分:8)

通过调用ExportTo()方法生成XML映射。

例如:

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

答案 2 :(得分:3)

我使用(几乎)这个扩展方法来获取内存中的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。