0

エンティティを更新すると別のエンティティが削除される NHibernate の問題があります。エンティティと関連するマッピングのセットは大きすぎてここで複製できませんが、この問題について議論するためにいくつかのサンプル データを作成したかったのです。この切り取った例では、 Dを更新するとAが削除されると想像してください。

Q: Aに関連するすべてのマッピング ファイル(BMappingFile & CMappingFile)の Aへのマッピングが.Cascade.None()として設定されていることを考えると、これがマッピングの問題になることは不可能であると言えますか、それとも他の NHib がありますか?この動作を実現できることに注意する必要がある構成/マッピング関連の設定はありますか?

DB テーブル

援助| 名前

B

入札| 名前| 援助

シド| シド| Cname | 援助

D

やった| 名前| シド

および一連の対応するマッピング ファイルの行に沿って

AMappingFile

public AMap()
{
    Table("[dbo].[A]");
    LazyLoad();
    Cache.ReadWrite().IncludeAll();

    Id(x=>x.Aid)
    .Access.CamelCaseField(Prefix.Underscore)
    .Column("[Aid]")
    .GeneratedBy.Identity();

HasMany(x=>x.Bs)
    .Access.CamelCaseField(Prefix.Underscore)
    .Cascade.AllDeleteOrphan()
    .Fetch.Select()
    .Inverse()
    .LazyLoad()
    .KeyColumns.Add("[Aid]")
    .Cache.ReadWrite().IncludeAll();

HasMany(x=>x.Cs)
    .Access.CamelCaseField(Prefix.Underscore)
    .Cascade.AllDeleteOrphan()
    .Fetch.Select()
    .Inverse()
    .LazyLoad()
    .KeyColumns.Add("[Aid]")
    .Cache.ReadWrite().IncludeAll();

    ...
}

BMappingFile

public BMap()
{
    Table("[dbo].[B]");
    LazyLoad();
    Cache.ReadWrite().IncludeAll();

    Id(x=>x.Bid)
    .Access.CamelCaseField(Prefix.Underscore)
    .Column("[Bid]")
    .GeneratedBy.Identity();

    References(x=>x.A)
    .Access.CamelCaseField(Prefix.Underscore)
    .Cascade.None()
    .Fetch.Select()
    .Columns("[Aid]");

    ...
}

CMappingFile

public CMap()
{
    Table("[dbo].[C]");
    LazyLoad();
    Cache.ReadWrite().IncludeAll();

    Id(x=>x.Cid)
    .Access.CamelCaseField(Prefix.Underscore)
    .Column("[Cid]")
    .GeneratedBy.Identity();

    References(x=>x.A)
    .Access.CamelCaseField(Prefix.Underscore)
    .Cascade.None()
    .Fetch.Select()
    .Columns("[Aid]");

HasMany(x=>x.Ds)
    .Access.CamelCaseField(Prefix.Underscore)
    .Cascade.AllDeleteOrphan()
    .Fetch.Select()
    .Inverse()
    .LazyLoad()
    .KeyColumns.Add("[Did]")
    .Cache.ReadWrite().IncludeAll();

    ...
}

DMappingFile

public DMap()
{
    Table("[dbo].[D]");
    LazyLoad();
    Cache.ReadWrite().IncludeAll();

    Id(x=>x.Did)
    .Access.CamelCaseField(Prefix.Underscore)
    .Column("[Did]")
    .GeneratedBy.Identity();

    References(x=>x.C)
    .Access.CamelCaseField(Prefix.Underscore)
    .Cascade.None()
    .Fetch.Select()
    .Columns("[Cid]");

    ...
}
4

1 に答える 1

0

コードまたはクエリのスニペットを提供する必要がありますが、質問に戻ります。

エンティティを更新すると、別のエンティティが削除される NHibernate の問題があります。

A5 のコレクションを持つ -entity インスタンスを永続化したとしますB。すべての のA空のコレクションを使用してインスタンスを更新すると、削除されます。BsB

于 2013-08-30T19:43:43.737 に答える