4

Fluent NHibernate マッピングを使用してデータをシリアル化/逆シリアル化しようとしています。

「ルート」エンティティから始めて、マッピングを使用して、そのエンティティにリンクされたすべてのエンティティを含むグラフを作成します。次に、この一連のエンティティをシリアル化します。

私はこのマッピングを持っています(関連部分のみ):

[Serializable]
public class Foo
{
    public virtual IList<Bar> Bars { get; set;}
    public virtual IList<System.Guid> Guids { get; set; }
}

[Serializable]
public class Bar
{
    public virtual Foo Foo { get; set; }
}

public class BarMap : ClassMap<Bar>
{
    References(x => x.Foo, "idFoo").Not.Nullable();
}

public class FooMap : ClassMap<Foo>
{
    HasMany(x => x.Bars).KeyColumn("idFoo");
    HasMany(x => x.Guids).Table("guids").KeyColumn("idFoo").Element("guid").AsBag().Not.LazyLoad();
}

Foo と Bar のシリアル化と逆シリアル化では、すべてが正しく機能します。しかし、逆シリアル化されたデータを DB に永続化しようとすると、Guidsそのデータは Foo オブジェクトにありますが、リストは永続化されません。

しばらくグーグルで調べましたが、役立つものは何も見つかりませんでした。私も試してみましたInverseが、無駄でした。私も試してみましたがCascade.SaveUpdate()、これもうまくいきませんでした。

Element値をsとして格納するために追加のテーブルを使用しているためですか? それが、私が考えることができるこのリストの唯一の特異性です.

この復元が機能しない原因は何ですか?

どんなアイデアでも大歓迎です。ありがとう。

編集:

Guids リストは正しくシリアル化および逆シリアル化されます。行われていない唯一のことは、GUID リストの DB 挿入ですが、これは逆シリアル化されたデータに存在します。

編集2:

奇妙な点は、プロジェクトの他の場所にある別のコードが同じことを行い、今回は成功していることです。したがって、両側で異なる NHibernate 構成パラメーターが曖昧である可能性がありますが、mainNH.xml.config は毎回同じファイルです。

4

4 に答える 4

1

試す

Session.Merge(bar);
Session.Merge(bar.Foo);
Session.SaveUpdate(bar);
于 2013-02-26T01:05:24.637 に答える
1

HasMany マッピングに Inverse(false) を追加してみてください。

于 2013-02-25T11:05:03.370 に答える
1

保存する前にセッションをフラッシュしてみてください。必ず保存してください (SaveOrUpdate ではありません)。

于 2013-02-25T11:06:40.717 に答える
1

保存/更新が子コレクションにカスケードしていない可能性があります。

マッピングを次のように変更します

  HasMany(x => x.Guids).Cascade.SaveUpdate().Table("guids").KeyColumn("idFoo").Element("guid").AsBag().Not.LazyLoad();
于 2013-02-25T10:40:00.770 に答える