NHibernate映射

时间:2011-01-02 20:05:52

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

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

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

由于

3 个答案:

答案 0 :(得分:2)

在另一种顺序中,我想添加一些你可能会发现的东西。 nHibernate确实保留了类的xml映射,但由于我不是这个想法的忠实粉丝,所以我决定四处寻找允许我在代码上定义映射的东西,答案是一个名为{{3的简单项目}}

使用这个项目,你可以定义一个类文件的映射,并且所有内容都保留为C#代码,ergo首先删除了嵌入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 :(得分:1)

NHibernate 3.0有一个新的查询API,称为'查询结束',它非常LINQ-isch。

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

答案 2 :(得分:1)

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

我在我当前的项目中使用FluentNHibernate和LINQ,我对它非常满意。您可以在http://fluentnhibernate.org/dls/v1.x/fluentnhibernate-NH3.0-binary-1.2.0.694.zip

下载NH3的最新FluentNHibernate版本