NHibernate。仅在第一次保存时更新字段

NHibernate。仅在第一次保存时更新字段,nhibernate,Nhibernate,如何使NHibernate仅在第一次保存时更新任何字段,而不在会话中更新它。更新(obj) 编辑:例如,我有一个实体A,它引用了实体B,比如: public class A { // ... some properties public virtual B PropB {get; set;} } 检索类A的实例后,我将其所有属性而不是PropB保存到网页上的字段中(包括id和版本)。在用户修改了一些字段并单击“保存”(我确信他不能编辑PropB)后,我可以从网页还原此对象并将其

如何使NHibernate仅在第一次保存时更新任何字段,而不在
会话中更新它。更新(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();
    }
    }
    
    你的问题不是很清楚。你到底有什么问题?最好说明你的问题以及你想做什么来解决它。你的问题不是很清楚。你到底有什么问题?最好说明你遇到的问题以及你想做什么来解决它。