2010-11-26 6 views
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(); 
    } 
} 

ParentChildオブジェクトの束を持ってみましょうGuid.CombをID列ジェネレータとして使用すると、更新は行われず、外部キーはINSERTステートメントにすぐに設定されます。しかし、私はIncrement戦略(クライアント側にもIDを作成し、ID値をデータベースから読み取るためのSELECTステートメントがないため、IDをすぐに設定できない理由はわかりません)

答えて

4

私はあなたが「逆」マッピング属性を見てみなければならないでしょうと思います。それをやった

HasMany(x => x.ChildNodes) 
      .Inverse() 
      .KeyColumns.Add("Parent_id") 
      .Cascade.All(); 
+0

おかげで、。 – Groo

関連する問題