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查询中实现条件的更好方法是什么?

NHibernate LinqProvider / IQueryable:在 Where 子句中是不是支持 FirstOrDefault()?

NHibernate子删除问题

如何在不使用IUserType的情况下查询数据库时防止NHibernate SqlDateTime溢出?