排除NHiberate映射导致实体删除

时间:2013-08-26 13:24:19

标签: nhibernate fluent-nhibernate mapping

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

    ...
}

1 个答案:

答案 0 :(得分:0)

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

  

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

假设您持有A - 实体实例,其集合为5 B。使用A的空集合更新Bs的实例后,将删除所有B