Tag: nhibernate

Criteria.DISTINCT_ROOT_ENTITY vs Projections.distinct

我对Hibernate来说很新。 我发现我们可以用以下两种不同的方法得到不同的结果。 有谁能告诉我他们之间有什么区别? 何时使用其他的? Projections.distinct(Projections.property("id")); VS criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

你如何使用NHibernate进行分页?

例如,我想在ASP.NET网页中填充gridview控件,只显示显示行数所需的数据。 NHibernate如何支持这个?

NHibernate的QueryOver与提取导致多个SQL查询和数据库命中

我试图select一个实体并获取相关列表: Session.QueryOver<UserRole>() .Fetch(x => x.UsersInRole).Eager .List(); 这导致了很多数据库命中。 第一个是这样的: SELECT … FROM UserRoles left outer join UsersInRoles on … 还有几百个单独的查询,如下所示: SELECT … FROM UsersInRoles left outer join UserRoles on … WHERE UserRoles.UserId=? 映射如下: public class UserRoleMap : ClassMap<UserRole> { public UserRoleMap() { Id(x => x.Id); Map(x => x.RoleName); HasManyToMany(x => x.UsersInRole) .Inverse() .LazyLoad() .Table("UsersInRoles"); } }

在使用NHibernate 3.0.0时,战斗笛卡尔积(x-join)

我在math上不好,但是我想知道笛卡儿的产品是什么。 这是我的情况(简化): public class Project{ public IList<Partner> Partners{get;set;} } public class Partner{ public IList<PartnerCosts> Costs{get;set;} public IList<Address> Addresses{get;set;} } public class PartnerCosts{ public Money Total{get;set;} } public class Money{ public decimal Amount{get;set;} public int CurrencyCode{get;set;} } public class Address{ public string Street{get;set;} } 我的目标是有效地加载整个项目。 问题当然是: 如果我试图加载合作伙伴和他们的成本,查询返回gazillion行 如果我懒加载Partner.Costs,数据库获取请求垃圾邮件(这是比第一种方法快一点) 在我看来,常见的解决方法是使用MultiQueries,但我只是不明白。 所以我希望通过这个确切的例子来学习。 如何有效地加载整个项目? Ps我正在使用NHibernate 3.0.0。 请不要用hql或stringbuild立的标准api方法发布答案。

在相同的解决scheme中引用2个不同版本的log4net

我使用的是引用log4net 1.2.10.0的NHibernate 2.1.2.400。 在同一个项目中,我也使用了简单的会计SDK,遗憾的是它仍然使用log4net 1.2.9.0。 所以我可以让NHibernate的工作,如果我引用log4net 1.2.10.0,但简单的SDK不起作用。 反之亦然 我猜大部分的问题来自于log4net已经改变了它的组装密钥。 我尝试使用绑定redirect而没有成功:2个DLL不具有相同的密钥。 我正在考虑重新编译NHibernate使用log4net 1.2.9.0,但这似乎是错误的事情,我的感觉是,简单会计不会更新他们的SDK使用log4net 1.2.10.0不久。 处理这个问题的最好方法是什么? 有没有可能解决?

NHibernate ISession刷新:何时何地使用它,为什么?

让我彻底困惑的事情之一是使用session.Flush ,与session.Commit和session.Close一起使用。 有时session.Close起作用,例如它提交我需要的所有更改。 我知道当我有一个事务时,我需要使用提交,或者有几个创build/更新/删除的工作单元,这样,如果发生错误,我可以select回滚。 但是有时候我真的被session.Flush背后的逻辑所session.Flush 。 我已经看到你有一个session.SaveOrUpdate()其次是一个刷新的例子,但是当我删除刷新它工作正常。 有时候我在Flush语句中遇到错误,说会话超时,删除它确保我没有遇到那个错误。 有没有人有一个很好的指导方针,以何时何地使用同花顺? 我已经检查了这个NHibernate文档,但我仍然无法find一个简单的答案。

什么是Hibernate的一级和二级caching?

任何人都可以用简单的语言解释Hibernate中的第一级和第二级caching是什么?

Nhibernate:如何用一对多的关系表示多对多的关系?

我已经在互联网上看过一篇文章(我再也找不到这个post让我反感)多对多的关系可以用一对多的关系来取代。 有人可以提供一个例子吗?

什么是Hi / Loalgorithm?

什么是Hi / Loalgorithm? 我在NHibernate文档中find了这个(这是一个生成唯一键的方法,第5.1.4.2节),但是我还没有find一个很好的解释。 我知道Nhibernate处理它,我不需要知道里面,但我只是好奇。

如何在NHibernate中加载关联而不重复?

我需要加载一个非常大的对象列表,有很多孩子和孩子的孩子。 最好的方法是什么? 我正在使用Oracle 11g数据库,并且已经编写了下面的方法,但是却导致了笛卡尔积(重复结果): public IList<ARNomination> GetByEventId(long eventId) { var session = this._sessionFactory.Session; var nominationQuery = session.Query<ARNomination>().Where(n => n.Event.Id == eventId); using (var trans = session.Transaction) { trans.Begin(); // this will load the Contacts in one statement nominationQuery .FetchMany(n => n.Contacts) .ToFuture(); // this will load the CustomAttributes in one statement nominationQuery .FetchMany(n => n.CustomAttributes) […]