NHibernate。仅在第一次保存时更新字段
如何使NHibernate仅在第一次保存时更新任何字段,而不在NHibernate。仅在第一次保存时更新字段,nhibernate,Nhibernate,如何使NHibernate仅在第一次保存时更新任何字段,而不在会话中更新它。更新(obj) 编辑:例如,我有一个实体A,它引用了实体B,比如: public class A { // ... some properties public virtual B PropB {get; set;} } 检索类A的实例后,我将其所有属性而不是PropB保存到网页上的字段中(包括id和版本)。在用户修改了一些字段并单击“保存”(我确信他不能编辑PropB)后,我可以从网页还原此对象并将其
会话中更新它。更新(obj)
编辑:例如,我有一个实体A
,它引用了实体B
,比如:
public class A
{
// ... some properties
public virtual B PropB {get; set;}
}
检索类
A
的实例后,我将其所有属性而不是PropB
保存到网页上的字段中(包括id和版本)。在用户修改了一些字段并单击“保存”(我确信他不能编辑PropB
)后,我可以从网页还原此对象并将其保存到数据库,但我不能还原链接的PropB
。所以,当我保存一个实例时,它会松开链接。因此,由于PropB
在第一次保存后不能以任何方式修改,我需要一个解决方案来限制其更新。有一个映射属性,可以有效地只插入属性:update=“false”
但是,您的问题有两个问题:
session.Update
不更新实体,刷新会话会更新实体。您只需调用session.Update
即可附加会话未加载的实体
为什么要修改不打算在数据库中更新的属性
有一个映射属性可以有效地只插入属性:update=“false”
但是,您的问题有两个问题:
session.Update
不更新实体,刷新会话会更新实体。您只需调用session.Update
即可附加会话未加载的实体
为什么要修改不打算在数据库中更新的属性
在这种情况下,我将使用DTO并更新交易中的实体
伪代码:
public StoreB(ADto dto)
{
using (transaction)
{
A entity = session.Get<A>(dto.Id);
entity.PropB = dto.PropB;
transaction.Commit();
}
}
public StoreC(ADto dto)
{
using (transaction)
{
A entity = session.Get<A>(dto.Id);
entity.PropC = dto.PropC;
transaction.Commit();
}
}
publicstoreb(ADto dto)
{
使用(事务)
{
实体=session.Get(dto.Id);
entity.PropB=dto.PropB;
Commit();
}
}
公共存储(ADto dto)
{
使用(事务)
{
实体=session.Get(dto.Id);
entity.PropC=dto.PropC;
Commit();
}
}
在这种情况下,我将使用DTO并更新交易中的实体
伪代码:
public StoreB(ADto dto)
{
using (transaction)
{
A entity = session.Get<A>(dto.Id);
entity.PropB = dto.PropB;
transaction.Commit();
}
}
public StoreC(ADto dto)
{
using (transaction)
{
A entity = session.Get<A>(dto.Id);
entity.PropC = dto.PropC;
transaction.Commit();
}
}
publicstoreb(ADto dto)
{
使用(事务)
{
实体=session.Get(dto.Id);
entity.PropB=dto.PropB;
Commit();
}
}
公共存储(ADto dto)
{
使用(事务)
{
实体=session.Get(dto.Id);
entity.PropC=dto.PropC;
Commit();
}
}
你的问题不是很清楚。你到底有什么问题?最好说明你的问题以及你想做什么来解决它。你的问题不是很清楚。你到底有什么问题?最好说明你遇到的问题以及你想做什么来解决它。