C# FluentNHibernate,两端都有有效的级联删除?

C# FluentNHibernate,两端都有有效的级联删除?,c#,nhibernate,fluent-nhibernate,C#,Nhibernate,Fluent Nhibernate,我有两个对象(多对多)站点和成员部分显示为: public class Site { public Site() { SiteAuthors = new List<Member>(); } public virtual IList<Member> SiteAuthors { get; set; } ... } public class Member { public Member() {

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

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; }
    ...
}
公共类站点
{
公共网站()
{
SiteAuthors=新列表();
}
公共虚拟IList站点作者{get;set;}
...
}
公共班级成员
{
公职人员()
{
AuthoredSites=新列表();
}
公共虚拟IList 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)
    { 
    }
}
public类成员覆盖:IAutoMappingOverride
{ 
公共无效替代(自动映射)
{ 
mapping.HasManyToMany(x=>x.AuthoredSites).Cascade.AllDeleteOrphan();
}
}
公共类SiteOverride:IAutoMappingOverride
{ 
公共无效替代(自动映射)
{ 
}
}
我在适当地删除网站和成员时遇到问题

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

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

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

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


谢谢你的帮助。

正如不信者@Damien_所说,级联并不完全是这样工作的。但是,您可以配置NHibernate来为您解决这个问题。您可以使用
事件侦听器处理NHibernate中的事件,并根据需要执行“其他操作”

我发现这个Hibernate文档(NHibernate的移植来源)列出了可能的
事件侦听器
s:


Delete
事件侦听器很可能就是您要查找的对象。这将允许您检测即将被删除的对象(在您的情况下是
成员
站点
),并执行一些额外的操作,如检查是否需要删除其他对象。

这不是级联在数据库中的工作方式-它们更符合“如果我删除此网站,请删除所有附加到该网站的成员”-即删除父网站将删除所有子网站。您正在寻找相反的结果(如果不存在子网站,请删除父网站)这在我所知道的大多数数据库系统中都不存在。我可以不用级联就使用它吗?似乎AllDeleteOpan表明我应该能够正确地做我想做的事情?就像,如果站点没有作者,那么就删除它?