【问题标题】:NHibernate mappingNHibernate 映射
【发布时间】:2011-01-02 20:05:52
【问题描述】:

我正在为我未来的项目评估一些 ORM。对于我的特定目标,我不喜欢使用 EF 方法,因为我已经拥有想要持久化的业务对象,并且我想针对除 SQL Server 之外的至少 1 个 DBMS。我对 Telerik 的 OpenAccess ORM 做了一些研究。它看起来非常强大,但学习起来也非常复杂,并且文档有些过时,因为它们的示例不适用于最新版本。现在我正在考虑尝试 NHibernate。它看起来很棒,但据我所知,它没有生产就绪的 LINQ 提供程序,这对我来说是一个巨大的缺点。但我想我可以没有它。

现在关于这个问题。我的项目中有多个程序集,每个程序集都包含不同的业务对象。我想制作另一个类似 DAL 的程序集,它将处理所有拆分为不同程序集的业务对象的所有 CRUD 操作。我知道 NHibernate 需要 xml 映射,但在我的情况下,我应该将映射 xml 文件嵌入到 DAL 程序集中还是包含业务对象的每个程序集中?

谢谢

【问题讨论】:

    标签: nhibernate nhibernate-mapping linq-to-nhibernate


    【解决方案1】:

    另外,我想添加一些您可能会觉得方便的东西。 nHibernate 确实为类保留了 xml 映射,但由于我不是这个想法的忠实拥护者,所以我决定四处寻找可以让我在代码上定义映射的东西,答案是一个名为 Fluent nHibernate 的简单项目.

    使用此项目,您可以将映射定义为类文件,所有内容都保留为 C# 代码,因此首先消除了嵌入 xml 文件的问题。

    你可以去寻找 Fluent nHibernate 的文档,但基本思路是这样的:

    public class CatMap : ClassMap<Cat>
    {
      public CatMap()
      {
        Id(x => x.Id);
        Map(x => x.Name)
          .Length(16)
          .Not.Nullable();
        Map(x => x.Sex);
        References(x => x.Mate);
        HasMany(x => x.Kittens);
      }
    }
    

    希望能帮到你。

    【讨论】:

    • +1 用于提及 FluentNHibernate。 OP 真的应该对此进行调查。
    • 谢谢大卫。我知道 Fluent API,但我发现它比使用 xml 映射更难工作,所以我决定采用旧的 xml 方式。无论如何谢谢:-)投票
    【解决方案2】:

    NHibernate 3.0 有一个名为“Query Over”的新查询 API,它非常符合 LINQ-isch。

    映射文件应该放在包含业务逻辑的程序集中。

    【讨论】:

    • 那么我可以在不同的程序集中拥有映射文件和实体对象吗?
    • @Davita 是的,你可以,我通常将映射文件放在包含我的数据层的程序集中。
    • 谢谢大家。我想我会选择 NHibernate
    【解决方案3】:

    除了 David 提到的 FluentNHibernate,我想指出 NH3 确实有它自己的 LINQ 提供程序,它现在对于大多数项目来说已经足够成熟了。 p>

    我在当前项目中使用 FluentNHibernate 和 LINQ,对此我感到非常满意。您可以在 http://fluentnhibernate.org/dls/v1.x/fluentnhibernate-NH3.0-binary-1.2.0.694.zip 下载最新的 FluentNHibernate NH3 版本

    【讨论】:

    • 我记得 3 年前由 Ayende Rahien 为 nHibernate 开发的一个旧 LINQ 项目,是一样的吗?抱歉,这里仍然使用 NH 2.1!
    猜你喜欢
    • 2011-04-10
    • 2012-11-23
    • 2010-10-05
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    相关资源
    最近更新 更多