我正在为我未来的项目评估一些ORM。我不喜欢EF方法用于我的特定目标,因为我已经拥有了我想要持久化的业务对象,并且我想要除了SQL Server之外至少有一个DBMS。我对telerik的OpenAccess ORM进行了一些研究。它看起来非常强大,但学习起来也很复杂,而且文档有点过时,因为它们的示例不适用于最新版本。现在我想尝试NHibernate。它看起来很棒,但据我所知,它没有生产就绪的LINQ提供程序,这对我来说是一个巨大的缺点。但我想我可以没有它。
现在关于这个问题。我的项目中有多个程序集,每个程序集都包含不同的业务对象。我想制作另一个DAL,就像汇编一样,它将处理在不同程序集中拆分的所有业务对象的所有CRUD操作。我知道NHibernate需要xml映射,但在我的情况下,我应该在DAL程序集或包含业务对象的每个程序集中嵌入映射xml文件的程序集?
由于
答案 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版本