如何让NHibernate仅在首次保存时更新任何字段,而不是在session.Update(obj)
上更新它?
编辑:例如,我有一个实体A
,它引用了实体B
,如:
public class A
{
// ... some properties
public virtual B PropB {get; set;}
}
在检索类A
的实例后,我将所有其属性而不是PropB
保存到网页上的字段中(包括ID和版本)。在用户修改了一些字段并单击“保存”后(我确信,他无法编辑 PropB
),我可以从网页恢复此对象并将其保存到数据库,但我无法恢复链接的PropB
。因此,当我保存A
实例时,它会丢失链接。因此,由于PropB
在首次保存后无法以任何方式修改,我需要一个限制其更新的解决方案。
答案 0 :(得分:3)
有一个映射属性可以有效地使属性仅插入:update="false"
。
但是,您的问题有两个问题:
session.Update
不更新实体,刷新会话。您只需要调用session.Update
来附加未被会话加载的实体。答案 1 :(得分:0)
在这种情况下,我会告诉我们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();
}
}