如何使用 NHibernate 仅更新记录的一列

paj*_*asv 3 c# asp.net nhibernate asp.net-mvc

我只想更新数据库中记录的一列。不是整个记录,而只是一列 (Stav)。我正在使用 NHibernate 并通过 DAO 访问。

Rezervace_dao rezervaceDao = new Rezervace_dao();
r.Stav = 1;
rezervaceDao.Update(r);
Run Code Online (Sandbox Code Playgroud)

上面的代码更新了整个记录,但这不是我想要的。

非常感谢。

Fré*_*ric 5

在您的示例代码中,您调用Update了一个实体。这是为了更新分离的实体,即当前 NHibernate 会话未跟踪的实体。

当更新分离的实体时,你告诉 NHibernate 接受提供的实体并将其视为它的完整新状态,以便在数据库中更新它。所以所有你没有设置的属性都会有它们的默认值,NHibernate 会认为它必须用这些默认值更新数据库。

如果您只想更改一个属性,则必须首先使用 NHibernate 加载您的实体,更改属性,然后更改Flush会话。

var r = session.Load<Rezervace>(id);
r.Stav = 1;
session.Flush();
Run Code Online (Sandbox Code Playgroud)

当从当前会话加载实体时,无需告诉 NHibernate 您要更新哪个实体。

默认情况下,NHibernate 仍会使用它们以前的值更新所有属性,并使用其新值更新更改的属性。正如Rabban answer所说,您必须启用dynamic-update类映射才能更改此行为,并且让 NHibernate 仅更新已更改的属性。

笔记:

我现在认为我不应该回答但:

  • 将要结束的问题标记为不清楚或重复(现在已完成为不清楚)。
  • 指出现有问题中当前可能的答案。顺便说一句,如果我们处于独立案例中,那么对其他问题之一的
    答案比我的要好。