Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用NHibernate仅更新记录的一列_C#_Asp.net_Asp.net Mvc_Nhibernate - Fatal编程技术网

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

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)

我只想更新数据库中记录的一列。不是整个记录,而是一列(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);
动态更新(可选,默认为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交互的位置。