FluentNHibernate或端口到NHibernate的代码映射

FluentNHibernate或端口到NHibernate的代码映射,nhibernate,fluent-nhibernate,nhibernate-mapping,fluent-nhibernate-mapping,mapping-by-code,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,Fluent Nhibernate Mapping,Mapping By Code,我有几个项目使用NH和FNH生成映射(一些是流畅的,一些是自动映射的)。我仍然需要一些bug和缺少的特性,但FNH可能会因为集成到NHibernate中的代码映射而消亡 问题:为FNH做出贡献,或者将映射迁移到通过代码映射,或者整合并修复那里的问题/实现功能?在我们的办公室,我们已经使用NHibernate三年了。我们一直在考虑迁移到Fluent Nhibernate,但从未迁移。使用hbm.xml文件仍然是最容易调试/更改的。这些xml文件的两个常见问题是,它们都是在创建sessionfact

我有几个项目使用NH和FNH生成映射(一些是流畅的,一些是自动映射的)。我仍然需要一些bug和缺少的特性,但FNH可能会因为集成到NHibernate中的代码映射而消亡


问题:为FNH做出贡献,或者将映射迁移到通过代码映射,或者整合并修复那里的问题/实现功能?

在我们的办公室,我们已经使用NHibernate三年了。我们一直在考虑迁移到Fluent Nhibernate,但从未迁移。使用hbm.xml文件仍然是最容易调试/更改的。这些xml文件的两个常见问题是,它们都是在创建sessionfactory期间经过验证的,并且它们不是重构安全的

由于一个bug,我不得不更新新版本的NHibernate(我们使用的是NHib 2.1.2GA),当我实现3.2GA时,我们还获得了使用语言映射(通过代码映射)的能力。我决定在Fluent上使用Loquacious,因为我不依赖于另一个项目(Fluent),而且如果代码映射被破坏,NHibernate将不会被发布

但是要注意,冗长的映射也不是完整的。当我通过代码映射所有东西时,我发现像property ref这样的基本东西并不总是实现的。因此,即使已经发货,也不是100%完整。虽然这不会令人震惊,但它也有缺陷。对真的

有关(报告的)错误的更多信息,请查看NHibernate错误数据库:

希望这有帮助。
至于Ted,据我所知,NH3.2没有任何远程等同于FNH的自动映射功能。(对我来说,这将是一个交易破坏者)

编辑

FNH Automapper可以处理对象模型中的大多数常见模式,例如继承、一对多关系、自引用等,而无需程序员的任何帮助。到目前为止,纯NH还没有达到这样的自动化水平


此外,詹姆斯·格雷戈里(James Gregory)已公开表示,他将继续发展FNH,至少在短期内如此。(我想我几个月前在FNH Google group上看到过这一点,但我不确定具体在哪里)。

thx到@TedOnTheNet我将继续使用并为FNH做出贡献,因为在某些领域,代码映射需要一段时间才能达到FNH

  • 自动映射
  • fluentapi告诉我们哪些可能性更好
  • 更详细的映射
  • .Database(SQLiteConfiguration.Standard.InMemory())

    .DataBaseIntegration(db =>
    {
        db.ConnectionString = ???;
        db.Dialect<SQLiteDialect>();
        db.Driver<???>();
    });
    
    .DataBaseIntegration(db=>
    {
    db.ConnectionString=???;
    db.方言();
    db.Driver();
    });
    
还有一些特点:

  • 每个子类的CompositeId和表
  • 传统列的默认值
  • 属性参考
更新:hbm.xml中的某些功能(和FluentMapping)在通过代码进行映射时根本不可能实现:

  • 旧列的默认值:
  • 仅查询属性/集合:

这有助于解决问题。因此,我会尽可能地推迟迁移,但仍有一些悬而未决的问题等待我解决,我们将很快生产一个用FNH映射的遗留db原型,因此我要么修复这些问题,要么解决它们,要么迁移(并修复)。也许你能告诉我你在FNH中缺少了什么东西?也许我可以告诉你,如果它在Loquacious中也缺失了…FNH 1.2缺失了等价物,FNH 1.3 alpha在joinedsubclass中有多个Keycolum的bug。我可以映射中不存在的defaultproperties吗?除非使用DTO或类似的东西,否则不可能在域中没有属性的情况下将字段插入数据库。如果你查看我的个人资料,你会发现我有一个类似的问题,但仍然没有答案。我已经知道答案了。。。您的列表列问题可以通过代码使用NH3.2映射来映射,例如:list(x=>x.YourCollectionPropertyHere,map=>{map.Key(k=>k.column(“keycolumnDetailTablehere”);map.Index(i=>{i.column(“IndexColumnNameHere”);i.Base(1);});},r=>r.OneToMany(x=>x.Class(typeof(DetailClassHere)));不完全正确请看@Firo-我查看了你的链接-它描述了“按约定映射”,Fabio在前几段基本上说“有些人称之为自动映射,但我不这么认为”。FNH也按约定进行映射,但FNH的自动映射提供了更高级别的映射。程序员只需告诉Automapper哪些程序集包含要映射的POCO类,其余的由它来完成。它更方便,但同样强大,因为您还可以为特殊情况添加自己的约定或覆盖。所以,我坚持我的答案,但我想我会补充一些细节。我想用“不完全”来表达,但你是对的,FNH自动映射要简单得多。我在一个生产应用程序中使用了它,并且对结果非常满意。也许你可以接受TedOnTheNet的答案——我相信他会很感激这个代表的提升