我正在使用流利的 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; }
}