Tag: nhibernate

何时在NHibernate / Hibernate OneToMany关系上使用inverse = false?

我一直在努力去理解Hibernate的inverse属性,而这似乎只是那些概念上困难的事情之一。 我得到的要点是当你有一个使用一对多映射的具有Child对象集合的父实体(例如Parent)时,在映射上设置inverse = true会告诉Hibernate“对方)有责任自行更新以维护其表中的外键引用。 这样做似乎有两个好处,当涉及到代码中的集合添加孩子,然后保存父级(级联所有设置): 你保存一个不必要的命中数据库 (因为没有反设置,Hibernate认为它有两个地方更新FK关系),并根据官方文件: 如果关联的列被声明为NOT NULL,那么NHibernate在创build或更新关联时可能会导致约束违规。 为了防止这个问题,你必须使用与被标记为inverse =“true”的许多有价值的结尾(集合或行李)的双向关联。 这一切似乎到目前为止是有道理的。 我不明白的是:什么时候你不想在一对多的关系上使用inverse = true?

当“type”T必须是一个引用types“如何使一个方法通用?

可能重复: 为什么在我的C#generics方法中出现“错误:…必须是引用types”? 我有两个几乎相同的Repository方法: public IList<Fund> GetFundsByName(int pageSize, string searchExpression) { return _session.CreateCriteria<Fund>() .AddNameSearchCriteria<Fund>(searchExpression) .AddOrder<Fund>(f => f.Name, Order.Asc) .SetMaxResults(pageSize).List<Fund>(); } public IList<Company> GetCompaniesByName(int pageSize, string searchExpression) { return _session.CreateCriteria<Company>() .AddNameSearchCriteria<Company>(searchExpression) .AddOrder<Company>(f => f.Name, Order.Asc) .SetMaxResults(pageSize).List<Company>(); } 唯一的区别是第一个_session.CreateCriteria属于Fundtypes,第二个是company 我希望我可以通过改变方法定义为通用: public IList<T> GetEntitiesByName<T>(int pageSize, string searchExpression) where T : ISearchableEntity { return _session.CreateCriteria<T>() .AddNameSearchCriteria<T>(searchExpression) .AddOrder<T>(f => f.Name, Order.Asc) […]

亚音速与NHibernate

什么时候使用这些工具中的一种转向另一种工具呢? 我发现Subsonic在快速完成任务方面非常有用,但在大型项目中,它往往不能扩展,它将您的领域模型与数据库模型联系在一起。 这就是Nhibernate进来的地方,因为它提供了与您的数据库模型无关的轻量级POCO,但是安装时间要长得多。

如何删除NHibernate中的子对象?

我有一个父对象与IList的子对象具有一对多的关系。 什么是删除子对象的最佳方法? 我不删除父母。 我的父对象包含一个IList的子对象。 这里是一对多关系的映射: <bag name="Tiers" cascade="all"> <key column="mismatch_id_no" /> <one-to-many class="TGR_BL.PromoTier,TGR_BL"/> </bag> 如果我尝试使用clear()从集合中删除所有对象,然后调用SaveOrUpdate(),我得到这个exception: System.Data.SqlClient.SqlException: Cannot insert the value NULL into column 如果我尝试单独删除子对象然后将其从父项中删除,我得到一个exception: deleted object would be re-saved by cascade 这是我第一次处理在NHibernate中删除子对象。 我究竟做错了什么? 编辑:只是为了澄清 – 我不是试图删除父对象,只是子对象。 我把这种关系build立在父母之间。 我是否也需要在子对象映射上创build多对一的关系?

通过代码进行NHibernate 3.2映射的文档和示例

除了Fabio Maulo的一些博客文章外,还有其他的网站有关于新的NHibernate 3.2映射代码特性的例子和/或文档吗?

无法将types为NHibernate.Collection.Generic.PersistentGenericBag的对象转换为List

我有一个名为ReportRequest的类,如下所示: public class ReportRequest { Int32 templateId; List<Int32> entityIds; public virtual Int32? Id { get; set; } public virtual Int32 TemplateId { get { return templateId; } set { templateId = value; } } public virtual List<Int32> EntityIds { get { return entityIds; } set { entityIds = value; } } public ReportRequest(int templateId, List<Int32> […]

TransactionScope如何回滚事务?

我正在写一个集成testing,我将插入一些对象到数据库,然后检查,以确保我的方法是否检索这些对象。 我的数据库的连接是通过NHibernate的……我创build这样一个testing通常的方法是做到以下几点: NHibernateSession.BeginTransaction(); //use nhibernate to insert objects into database //retrieve objects via my method //verify actual objects returned are the same as those inserted NHibernateSession.RollbackTransaction(); 不过,我最近发现了一些显然可以用于这个目的的TransactionScope 。 我find的一些示例代码如下所示: public static int AddDepartmentWithEmployees(Department dept) { int res = 0; DepartmentAdapter deptAdapter = new DepartmentAdapter(); EmployeeAdapter empAdapter = new EmployeeAdapter(); using (TransactionScope txScope = new TransactionScope()) […]

将IList或IEnumerable转换为Array的最佳方法

我有一个HQL查询可以生成一个IList的结果,或IEnumerable的结果。 但是,我希望它返回一个我select的实体数组,那么完成这个的最好方法是什么? 我可以通过它枚举并构build数组,或者使用CopyTo()定义的数组。 有没有更好的办法? 我采用了CopyTo方法。

JoinQueryOver和JoinAlias有什么区别?

我需要知道JoinQueryOver和JoinAlias之间有什么区别,什么时候使用它们? 谢谢。

条件SpatialRestrictions.IsWithinDistance NHibernate.Spatial

有没有人实现这一点,或知道是否会很难实现这个/有任何指针? public static SpatialRelationCriterion IsWithinDistance(string propertyName, object anotherGeometry, double distance) { // TODO: Implement throw new NotImplementedException(); } 从NHibernate.Spatial.Criterion.SpatialRestrictions 我可以在hql中使用“where NHSP.Distance(PROPERTY,:point)”。 但是想要将这个查询与我现有的Criteria查询结合起来。 目前我正在创build一个粗糙的多边形,并使用 criteria.Add(SpatialRestrictions.Intersects("PROPERTY", myPolygon)); 编辑有一个通过重载SpatialRelationCriterion构造函数,添加新的SpatialRelation.Distance的原型工作 public static SpatialRelationCriterion IsWithinDistance(string propertyName, object anotherGeometry, double distance) { return new SpatialRelationCriterion(propertyName, SpatialRelation.Distance, anotherGeometry, distance); } 向SpatialRelationCriterion添加了一个新字段 private readonly double? distance; public SpatialRelationCriterion(string propertyName, SpatialRelation relation, object anotherGeometry, […]