我有一个NHibernate问题,我更新了一个实体,导致删除另一个实体。实体和相关映射集太大而无法复制,但我想创建一些示例数据以讨论该问题。在此剪切示例中,想象更新 D 会导致 A 的删除。
问:考虑到与 不可能 这是一个映射问题。 > A ie(BMappingFile& CMappingFile)将其映射到 A 设置为 .Cascade.None() 或者是否存在我应该注意的其他一些NHib配置/映射相关设置可以实现这种行为吗?
数据库表
A
援助 | Aname
乙
出价 | Bname | 援助
C
Cid | Cname | 援助
d
| Dname | Cid
和
行的一组相应的映射文件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]");
...
}
答案 0 :(得分:0)
您应该提供代码或查询的片段,但回到您的问题。
我有一个NHibernate问题,我更新了一个实体并导致删除另一个实体
假设您持有A
- 实体实例,其集合为5 B
。使用A
的空集合更新Bs
的实例后,将删除所有B
。