1

2 つのオブジェクト (多対多) のサイトとメンバーがあり、部分的に次のように表示されます。

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)
    { 
    }
}

サイトとメンバーを適切に削除できません。

オーバーライドで逆マッピングのさまざまな組み合わせを試しましたが、必然的に必要なケースの 1 つが機能しません。

私が達成したいのは、サイトからすべてのメンバーを削除すると (他のサイトの作成者になる可能性があることを思い出してください)、サイトを削除したいということです。

メンバーからサイトを削除すると、そのサイトの作成者が他にいない場合にのみサイトを削除する必要があります。

使用する正しいオーバーライドまたはマッピング構成は何ですか?

ご協力いただきありがとうございます。

4

1 に答える 1

3

@Damien_The_Unbeliever が言ったように、これはカスケードが機能することを意図したものではありません。ただし、NHibernate を構成して、これを処理することができます。NHibernate でイベントを処理し、Event Listener必要に応じて「何か別のこと」を行うことができます。

Event Listener可能なsをリストするこの Hibernate ドキュメント (NHibernate が移植されたもの) を見つけました: http://anandhansubbiah.com/blog/hibernate-events/

DeleteEvent Listenerは、おそらく探しているものです。これにより、削除しようとしているオブジェクト (あなたの場合はMemberand Site) を検出し、他のオブジェクトを削除する必要があるかどうかを確認するなど、何か特別なことを行うことができます。

于 2012-11-15T05:22:00.223 に答える