【问题标题】:Generate XML mappings from fluent Nhibernate从流利的 Nhibernate 生成 XML 映射
【发布时间】:2010-01-10 05:57:16
【问题描述】:

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

我需要手动检查流畅的映射是否与旧项目中的映射相关。

【问题讨论】:

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


    【解决方案1】:

    你可以这样做:

     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

    【讨论】:

    • 至少对于 FluentNH 的当前版本(例如 1.3),m.HbmMappings.ExportTo() 不存在 - 这在某种意义上是有意义的,因为 .hbm 映射已经是文件。
    • 链接失效
    • 嗯。是的。我猜自 2009 年以来已经过去了 8 年。我添加了另一个类似的链接。
    • 文件的扩展名是什么?
    【解决方案2】:

    通过调用 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

    【讨论】:

    • 链接失效
    【解决方案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 更新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-26
      • 1970-01-01
      • 2010-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-09
      相关资源
      最近更新 更多