0
NHibernateが子エンティティの外部キーを挿入した直後にそれを更新しないように、マッピングをどのように設定すればよいですか?NHibernateインサートは、コレクションアイテムの更新を生成する
など。親クラスは、次のようにマップされている:私は親エンティティを保存すると
Parent p = new Parent("test");
p.ChildNodes.AddRange(GetSomeDummyNodes());
は、生成されたSQLは次のようになります:
INSERT INTO [Parent] (Name, Id) VALUES (@p0, @p1); @p0 = 'test', @p1 = 0
INSERT INTO [Child] (Name, Id) VALUES (@p0); @p0 = 'child1', @p1 = 0
INSERT INTO [Child] (Name, Id) VALUES (@p0); @p0 = 'child2', @p1 = 1
INSERT INTO [Child] (Name, Id) VALUES (@p0); @p0 = 'child3', @p1 = 2
UPDATE [Child] SET Parent_id = @p0 WHERE Id = @p1; @p0 = 0, @p1 = 0
UPDATE [Child] SET Parent_id = @p0 WHERE Id = @p1; @p0 = 1, @p1 = 0
UPDATE [Child] SET Parent_id = @p0 WHERE Id = @p1; @p0 = 2, @p1 = 0
class ParentMap : ClassMap<Parent>
{
public ParentMap()
{
Id(x => x.Id)
.GeneratedBy.Increment();
Map(x => x.Name);
HasMany(x => x.ChildNodes)
.KeyColumns.Add("Parent_id")
.Cascade.All();
}
}
がParent
がChild
オブジェクトの束を持ってみましょうGuid.CombをID列ジェネレータとして使用すると、更新は行われず、外部キーはINSERT
ステートメントにすぐに設定されます。しかし、私はIncrement
戦略(クライアント側にもIDを作成し、ID値をデータベースから読み取るためのSELECT
ステートメントがないため、IDをすぐに設定できない理由はわかりません)
おかげで、。 – Groo