0

Fluent NHibernate を使用してファイルの読み取りと書き込みを行っています。現時点では、親子関係があり、マッピングはによって定義されています

public class ParentMappings: ClassMap<Parent>
{
    public ParentMappings()
    {
        Table("Parent");
        Id(x => x.Id).Column("Parent_Id");
        ...

        HasMany(x => x.Children)
            .Not.KeyNullable()
            .Not.Inverse()
            .KeyColumn("Parent_Id")
            .Cascade.All();

        ...
    }
}

public class ChildMappings : ClassMap<Child>
{
    public ChildMappings()
    {
        Table("Child");
        Id(x => x.Id).Column("Child_Id");

        Map(x => x.ParentId).Column("Parent_Id");
        ...
    }
}

これが問題です。速度を維持するために、ステートレス セッションで親/子テーブルに書き込めるようにしたいだけでなく、ステートフル セッションでテーブルから読み込んで、Children コレクションが正しく読み込まれるようにしたいと考えています。ただし、この 2 つのアプローチには互換性がないようです。への呼び出しHasMany()は、統計なしの書き込みを中断します。それを削除すると、ステートフル読み取りが中断されます。

より広い文脈では、ステートフル セッションを使用してデータベースに書き込みたい場合もあります。ただし、その場合、Map(x => x.ParentId).Column("Parent_Id")ステートメントを含めると、ステートフルな書き込みが中断されます。

ステートフル セッションとステートレス セッションで異なるマッピングを使用する必要があるようです。ただし、私は NHibernate を初めて使用するので、現時点では明確な方法がわかりません。誰でもこれを行う方法、または同等の回避策を提案できますか?

4

1 に答える 1

2

後方参照を子の親にマップしましたが、ID だけではなく参照である必要があります。に変更します

// in childmap
Reference(x => x.Parent).Column("Parent_Id");

逆に設定してパフォーマンスを向上させることができます

// in parentmap
HasMany(x => x.Children)
        .Not.KeyNullable()
        .Inverse()
        .KeyColumn("Parent_Id")
        .Cascade.All();

その後、ステートフル セッションでHasManyMap(x => x.ParentId)が衝突しなくなりました

于 2013-08-28T18:15:41.743 に答える