【发布时间】:2013-08-29 00:13:28
【问题描述】:
我有一个 NHibernate 问题,我更新了一个实体并导致另一个实体的删除。实体集和相关映射太大,无法在此处复制,但我想创建一些示例数据来讨论这个问题。在这个剪切示例中,假设更新 D 会导致删除 A。
问: 鉴于所有与 相关的映射文件,这是否是一个映射问题不可能 >A 即(BMappingFile 和 CMappingFile)将其映射到 A 设置为 .Cascade.None() 或者有一些我应该知道的其他 NHib 配置/映射相关设置可以实现这种行为?
数据库表
一个
援助|姓名
B
投标 | Bname | 援助
C
Cid | Cname | Aid
D
| Dname | Cid
以及一组对应的映射文件
映射文件
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]");
...
}
【问题讨论】:
-
你用什么代码来修改和保存这些对象?
-
它可以是对对象图中任何实体的任何类更新。没有发生删除。我更感兴趣的是确认到 A 的直接映射文件是否都是 Cascade.None() ,我可以排除这些映射,并希望获得关于还有什么可能起作用的建议。
标签: nhibernate fluent-nhibernate mapping