NHibernate的。仅在首次保存时更新字段

时间:2011-07-12 19:51:44

标签: nhibernate

如何让NHibernate仅在首次保存时更新任何字段,而不是在session.Update(obj)上更新它?

编辑:例如,我有一个实体A,它引用了实体B,如:

public class A
{
    // ... some properties
    public virtual B PropB {get; set;}
}

在检索类A的实例后,我将所有其属性而不是PropB保存到网页上的字段中(包括ID和版本)。在用户修改了一些字段并单击“保存”后(我确信,他无法编辑 PropB),我可以从网页恢复此对象并将其保存到数据库,但我无法恢复链接的PropB。因此,当我保存A实例时,它会丢失链接。因此,由于PropB在首次保存后无法以任何方式修改,我需要一个限制其更新的解决方案。

2 个答案:

答案 0 :(得分:3)

有一个映射属性可以有效地使属性仅插入:update="false"

但是,您的问题有两个问题:

  1. session.Update不更新实体,刷新会话。您只需要调用session.Update来附加未被会话加载的实体。
  2. 为什么要在DB中修改不打算更新的属性?

答案 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();
  }
}