エンティティを更新すると別のエンティティが削除される 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]");
...
}