1

我有两个对象(多对多)站点和成员部分显示为:

public class Site
{
    public Site()
    {
        SiteAuthors = new List<Member>(); 
    }

    public virtual IList<Member> SiteAuthors { get; set; }
    ...
}

public class Member
{
    public Member()
    {
        AuthoredSites = new List<Site>(); 
    }

    public virtual IList<Site> AuthoredSites { get; set; }
    ...
}

我已将映射保留为默认值,覆盖如下所示:

public class MemberOverride : IAutoMappingOverride<Member>
{ 
    public void Override(AutoMapping<Member> mapping)
    { 
        mapping.HasManyToMany(x => x.AuthoredSites).Cascade.AllDeleteOrphan();
    }
}

public class SiteOverride : IAutoMappingOverride<Site>
{ 
    public void Override(AutoMapping<Site> mapping)
    { 
    }
}

我在适当地删除网站和成员时遇到问题。

我在覆盖中尝试了各种逆映射组合,但不可避免地有一种我需要的情况不起作用。

我想要实现的是,当我从站点中删除所有成员时(记住他们仍然可以是其他站点的作者) - 然后我希望删除该站点。

当我从成员中删除站点时,只有在没有其他作者的情况下才应删除该站点。

要使用的正确覆盖或映射配置是什么?

谢谢你的帮助。

4

1 回答 1

3

正如@Damien_The_Unbeliever 所说,这并不是级联的工作方式。但是,您可以配置 NHibernate 来为您处理这个问题。您可以使用 an 处理 NHibernate 中的事件,Event Listener并根据需要执行“其他操作”。

我发现这个 Hibernate 文档(从 NHibernate 移植而来)列出了可能Event Listener的 s:http ://anandhansubbiah.com/blog/hibernate-events/

DeleteEvent Listener可能是您要查找的内容。这将允许您检测即将被删除的对象(在您的情况下MemberSite),并做一些额外的事情 - 比如检查是否需要删除其他对象。

于 2012-11-15T05:22:00.223 回答