我有两个对象(多对多)网站和成员部分显示为:
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)
{
}
}
我在删除网站和成员方面遇到了问题。
我在覆盖中尝试了各种反映射组合,但不可避免地我需要的一种情况不起作用。
我想要实现的是,当我删除网站上的所有成员时(记住他们仍然可以是其他网站上的作者) - 然后我希望删除该网站。
当我从会员中删除某个网站时,只有在没有其他作者的情况下才能删除该网站。
要使用的正确覆盖或映射配置是什么?
感谢您的帮助。
答案 0 :(得分:3)
正如@Damien_The_Unbeliever所说,这并不是说级联的目的是什么。但是,您可以配置NHibernate来为您处理这个问题。您可以使用Event Listener
处理NHibernate中的事件,并根据需要执行“其他操作”。
我发现了这个Hibernate文档(移植了NHibernate),列出了可能的Event Listener
:http://anandhansubbiah.com/blog/hibernate-events/
删除Event Listener
可能就是你要找的东西。这将允许您检测即将被删除的对象(在您的情况下为Member
和Site
),并执行额外操作 - 例如检查是否需要删除其他对象。