C# 如何使用NHibernate仅更新记录的一列
我只想更新数据库中记录的一列。不是整个记录,而是一列(Stav)。我正在使用NHibernate,通过DAO访问C# 如何使用NHibernate仅更新记录的一列,c#,asp.net,asp.net-mvc,nhibernate,C#,Asp.net,Asp.net Mvc,Nhibernate,我只想更新数据库中记录的一列。不是整个记录,而是一列(Stav)。我正在使用NHibernate,通过DAO访问 Rezervace_dao rezervaceDao = new Rezervace_dao(); r.Stav = 1; rezervaceDao.Update(r); 上面的代码更新了整个记录,但这不是我想要的 Rezervace_dao rezervaceDao = new Rezervace_dao(); r.Stav = 1; rezervaceDao.Update(r)
Rezervace_dao rezervaceDao = new Rezervace_dao();
r.Stav = 1;
rezervaceDao.Update(r);
上面的代码更新了整个记录,但这不是我想要的
Rezervace_dao rezervaceDao = new Rezervace_dao();
r.Stav = 1;
rezervaceDao.Update(r);
非常感谢。您必须在映射中将
动态更新
设置为真
。但是你必须为你想要这种行为的每一个类设置它
Rezervace_dao rezervaceDao = new Rezervace_dao();
r.Stav = 1;
rezervaceDao.Update(r);
请注意:使用动态插入
Rezervace_dao rezervaceDao = new Rezervace_dao();
r.Stav = 1;
rezervaceDao.Update(r);
各国:
Rezervace_dao rezervaceDao = new Rezervace_dao();
r.Stav = 1;
rezervaceDao.Update(r);
动态更新(可选,默认为false):指定应在运行时生成更新SQL,并仅包含值已更改的列
Rezervace_dao rezervaceDao = new Rezervace_dao();
r.Stav = 1;
rezervaceDao.Update(r);
NHibernate参考文献中的示例(简称):
Rezervace_dao rezervaceDao = new Rezervace_dao();
r.Stav = 1;
rezervaceDao.Update(r);
//其他属性
下面将讨论缺点。在示例代码中,您对实体调用
Update
。此选项用于更新分离的实体,即当前NHibernate会话未跟踪的实体
Rezervace_dao rezervaceDao = new Rezervace_dao();
r.Stav = 1;
rezervaceDao.Update(r);
var r = session.Load<Rezervace>(id);
r.Stav = 1;
session.Flush();
更新独立实体时,请告诉NHiBiNT以提供所提供的实体,并将其视为其完整的新状态,以便在数据库中更新它。因此,所有未设置的属性都将具有默认值,NHiBiNT将考虑使用默认值更新数据库。
Rezervace_dao rezervaceDao = new Rezervace_dao();
r.Stav = 1;
rezervaceDao.Update(r);
如果只想更改一个属性,则必须首先使用NHibernate加载实体,更改属性,然后刷新会话
Rezervace_dao rezervaceDao = new Rezervace_dao();
r.Stav = 1;
rezervaceDao.Update(r);
var r = session.Load<Rezervace>(id);
r.Stav = 1;
session.Flush();
var r=session.Load(id);
r、 Stav=1;
session.Flush();
从当前会话加载实体时,无需告诉NHibernate您正在更新哪个实体
Rezervace_dao rezervaceDao = new Rezervace_dao();
r.Stav = 1;
rezervaceDao.Update(r);
默认情况下,NHibernate仍将使用其以前的值更新所有属性,并使用其新值更新更改的属性。如所述,您必须在类映射上启用动态更新
,以更改此行为,并让NHibernate仅更新更改的属性
Rezervace_dao rezervaceDao = new Rezervace_dao();
r.Stav = 1;
rezervaceDao.Update(r);
注意事项:
Rezervace_dao rezervaceDao = new Rezervace_dao();
r.Stav = 1;
rezervaceDao.Update(r);
现在我认为我应该没有回答,但是:
Rezervace_dao rezervaceDao = new Rezervace_dao();
r.Stav = 1;
rezervaceDao.Update(r);
- 将问题标记为“不清楚”或“重复”(现在标记为“不清楚”)
- 指向现有问题中当前可能的答案。
顺便说一句,如果我们是在独立的情况下,对其中一个问题的回答比我的好
动态更新设置为true。但是你必须为你想要这种行为的每一个类设置它。@Rabban好的,那么我怎么做更新。。。类似于:rezervaceDao.Update(r.Stav);没有work@RobertoBenazzato我有类保留,它有一些参数(属性),比如:date\u from,id,state。。。。当我关闭预订时,我只想更改状态。你现在明白了吗?:)@pajasv如何映射实体、HBM、FluentNHibernate等?请注意,该实体是分离实体。@AmitJoshi恐怕你是对的。但他没有说明这一点,而且该实体可能位于同一会话/工作单元中,但来自另一个存储库。再加上他给出的答案,他应该能够解决这个问题并理解整个问题。。因为我更新了controllet,但是没有会话引用,对吗?我不知道DAO是如何实现的,这就是为什么我在这里写下您需要在NHibernateAPI上执行的基本操作。请考虑,当你问你应该把你的麻烦带到它的裸露的本质上,去掉特定于你的应用程序的部分,并且尽可能地与问题无关。看见因此,在您的情况下,您必须将其移动到应用程序与NHibernate API交互的位置。