1

外部キー エンティティのチェーンにいくつかのエンティティをバッチ挿入しようとしています。エンティティ ID は ID としてマップされます。

私は A のリストを持ち、B をプロパティとして持ち、B は C をプロパティとして持っています。

データベースに変更をコミットしようとすると、「オブジェクトが保存されていない一時インスタンスを参照しています - フラッシュする前に一時インスタンスを保存するか、プロパティのカスケード アクションを自動保存するものに設定してください。」というエラーが表示されます。

class Program
{
    static viod Main (string[] args)
    {
        var list = new List<A>{
            new A{
                B = new B{
                    C = new C{
                        Name = "test";
                    }
                }
            },
            new A{
                B = new B{
                    C = new C{
                        Name = "test";
                    }
                }
            },
        };

        foreach(var a in list)
        {
            statelessSession.Insert(a);
            //session.Save(a);    // I have tried this as well, does not work neither.
        }
        transaction.Commit();
    }
}

public class A : BaseEntity
{
    public virtual B B{get; set;}
}
public class B : BaseEntity
{
    public virtual C C{get; set;}
}

public class C : BaseEntity
{
    public virtual string Name{get; set;}
}

public class BaseEntity
{
    public virtual long ID {get; set;}
}
4

1 に答える 1

0

できません。

Identity を使用するには、次のレコードに関連付ける ID を取得するために、NHibernate が最後の挿入を選択する必要があります。

http://www.philliphaydon.com/2011/09/the-benefits-of-letting-the-orm-generate-the-identity-part-1/

Guid Comb または HiLo を使用する必要があります。

これらにより、NHibernate はキー自体を生成し、バッチ処理と挿入の前にすべての関連付けを作成できます。

于 2013-11-14T16:08:07.310 に答える