0

我有一个 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]");

    ...
}
4

1 回答 1

0

您应该提供代码片段或查询,但要回到您的问题。

我有一个 NHibernate 问题,我更新一个实体并导致另一个实体的删除

假设您A具有 5 集合的持久化实体实例B。一旦您更新使用所有s 的A空集合的实例,就会被删除。BsB

于 2013-08-30T19:43:43.737 回答