0

流暢な nhibernate を使用して、親子関係を SQL データベースにマップしています。
ほとんどの場合、親エンティティに子エンティティを保存させます。それらは 1 つのトランザクションに挿入されます。間違っていなければ、.Inverse() と sql ID 列を使用した場合、これは不可能です。

私が抱えている問題は、1つの特定のケースで、子エンティティと子エンティティのみを更新したいということです。
現在のセットアップでこれを行うと、子レコードは親との関係を失うか (親オブジェクトが null の場合)、親オブジェクトを完全に置き換えます (ダミーの親を 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 update ステートメントを使用しています。

私の好みでは少し面倒ですが、仕事は完了します。

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