NHibernate - 如何使用 where 子句保存对象
Posted
技术标签:
【中文标题】NHibernate - 如何使用 where 子句保存对象【英文标题】:NHibernate - how to save object with where clause 【发布时间】:2008-12-07 08:09:11 【问题描述】:我不知道如何使用 where 子句保存对象。我需要它来防止保存日期范围与其他对象重叠的对象。
public class TaskEvent
public DateTime StartDate get;set;
public DateTime EndDate get;set;
我想在保存操作中检查条件是否重叠,但我不知道如何。
有什么想法吗?
【问题讨论】:
嗯?这里没有太多信息可以继续。请给出更完整的代码示例。 我需要这样的东西: UPDATE TaskEvent SET ... WHERE ID = @ID 如何在此处添加一些条件 【参考方案1】:您需要在代码中找出需要保存的对象,然后保存这些对象。这是业务逻辑,不应该被推入持久化操作中。 IMO,即使 NH 可以支持。
【讨论】:
是的,我明白,但这不是线索。当我调用 session.Update() 时,我需要知道如何将标准之类的东西放在哪里。例如:UPDATE TaskEvent SET ... WHERE ID = @ID 如何在此处添加一些条件【参考方案2】:您可以将 HQL 用于临时更新查询
session.CreateQuery("UPDATE TaskEvent SET ... WHERE ID = :ID and ...")
.SetInt32("ID", ID)
//.SetDateTime("", )
//.SetDateTime("", )
.ExecuteUpdate();
或者以一种更 NHibernate 的方式...获取所需的 TaskEvents(where 子句),更新它们的属性,并提交事务。
【讨论】:
【参考方案3】:一种方法是重新确定您不想在代码中保存哪些 TaskEvent 对象并将它们从 ISession 中逐出,这样它们就不会被持久化。
【讨论】:
以上是关于NHibernate - 如何使用 where 子句保存对象的主要内容,如果未能解决你的问题,请参考以下文章
NHibernate 使用带有 WHERE IN 的 QueryOver
将原生 SQL where 子句应用于实体的 Nhibernate 查询
NHibernate LinqProvider / IQueryable:在 Where 子句中是不是支持 FirstOrDefault()?