FluentNHibernate或端口到NHibernate的代码映射

时间:2011-11-23 09:39:27

标签: nhibernate fluent-nhibernate nhibernate-mapping fluent-nhibernate-mapping mapping-by-code

我有几个项目使用NH和FNH生成映射(一些Fluent一些Automapped)。我仍然需要一些bug和缺少的功能,但似乎FNH可能因为集成到NHibernate中的代码映射而死亡。

问题:有助于FNH或将映射迁移到代码映射或confORM并修复问题/实现功能吗?

3 个答案:

答案 0 :(得分:7)

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

由于一个错误,我不得不更新NHibernate的新版本(我们使用的是NHib 2.1.2GA),当我实现3.2GA时,我们也获得了使用loquacious映射(通过代码映射)的能力。我决定使用Loquacious over Fluent,因为我没有依赖于另一个项目(Fluent),并且如果代码映射被破坏,NHibernate将不会被发送。

请注意,Loquacious映射也不完整。当我通过代码映射所有内容时,我发现像property-ref这样的基本内容并不总是实现。因此,即使它已发货,也不是100%完成。虽然这不会令人感到震惊,但它有缺陷。是。真。 ; - )

有关(报告)错误的更多信息,请查看NHibernate错误数据库:https://nhibernate.jira.com/browse/NH

希望这会有所帮助。 此致,特德

答案 1 :(得分:5)

对@TedOnTheNet我将继续使用并为FNH做出贡献,因为在某些地区按代码映射到达FNH需要一段时间

  • 自动映射
  • Fluent API更好地说明了哪些可能性
  • 更详细的映射
  • .Database(SQLiteConfiguration.Standard.InMemory())

    更容易理解
    .DataBaseIntegration(db =>
    {
        db.ConnectionString = ???;
        db.Dialect<SQLiteDialect>();
        db.Driver<???>();
    });
    

和一些功能:

  • CompositeId和每个子类的表
  • 旧列的默认值
  • 属性参考

更新: hbm.xml(和FluentMapping)的某些功能根本无法通过代码进行映射:

答案 2 :(得分:2)

根据我的判断,NH 3.2没有任何远程等同于FNH的Automapping的东西。 (对我来说,那将是一个破坏者)。

修改

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

此外,詹姆斯格雷戈里已经公开声明他将继续发展FNH,至少在短期内如此。 (想想我几个月前在FNH Google小组上看过这个,但我不确定到底在哪里)。