0

我正在使用流利的 nhibernate 将父子关系映射到 sql 数据库。
大多数时候,我让父实体保存它的子实体,它们被插入到 1 个事务中,如果我没记错的话,如果我使用 .Inverse() 和 sql 标识列,这是不可能的。

我遇到的问题是,在一种特定情况下,我想更新子实体并且只更新子实体。
当我使用当前设置执行此操作时,子记录将失去与其父对象的关系(如果父对象为空)或将完全替换我的父对象(如果我插入一个只有一个 id 的虚拟父对象)。

有谁知道在不影响外键的情况下实现单个记录更新的方法?
我可以想到手动 sql 语句或存储过程,但我希望有一种休眠方式。

我有以下设置(为方便起见进行了简化):

public ProjectMap()
{
  Table("Project");
  Id(p=> p.Id);
  HasMany(p => p.Risks).Not.LazyLoad();
}

public RiskMap()
{
  Table("ProjectRisk");
  Id(r=> r.Id);
  References(r => r.Project).Column("ProjectId");
  Map(r => r.Description);
}

public class Project
{
  public virtual int Id { get; set; }
  public virtual IList<Risk> Risks { get; set; }
}

public class Risk
{
  public virtual int Id { get; set; }
  public virtual string Description{ get; set; }
  public virtual Project Project { get; set; }
}
4

1 回答 1

0

正如 Miroslav 建议的那样,我现在正在使用 HQL 更新语句。

这对我的口味来说有点乱,但它完成了工作。

Session.CreateQuery("update Risk set Closed = :completed where Id = :id")
                    .SetInt32("id", id)
                    .SetBoolean("completed", completed)
                    .ExecuteUpdate();
于 2012-08-08T14:37:24.633 回答