我有一个 NHibernate 问题,我更新一个实体并导致另一个实体的删除。实体集和相关映射太大,无法在此处复制,但我想创建一些示例数据来讨论这个问题。在这个删减的示例中,假设更新D会导致删除A。
问:公平地说,这不可能是一个映射问题,因为所有与A相关的映射文件(BMappingFile 和 CMappingFile)都将其映射到A设置为.Cascade.None()或者还有其他一些 NHib我应该知道的配置/映射相关设置可以实现这种行为?
数据库表
一个
援助| 一个名字
乙
投标| 名称| 援助
C
西德| 名称| 援助
D
做了| 名称| 西德
以及一组对应的映射文件
映射文件
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();
...
}
映射文件
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]");
...
}
映射文件
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();
...
}
映射文件
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]");
...
}