NHibernate多对多映射

我遇到了使用NHibernate进行多对多映射的问题。 基本上我在我的对象模型(场景和技能)中有2个类映射到我的数据库中的三个表(Scenario,Skill和ScenarioSkill)。 ScenarioSkills表只保存SKill和Scenario表(SkillID,ScenarioID)的ID。

在对象模型中,Scenario具有一些常规属性和从ScenarioSkills表中获取的关联技能列表(IList)。 Skill对象没有关联的IList of Scenarios。

从场景和技能到场景技能的映射是多对多关系:

情景* — * ScenarioSkill * — *技能

我已将列表映射为行李,因为我认为这是我阅读过的最佳选择。 映射如下:

在Scenario类中

    

并在技能课程内

     

一切正常,除非我尝试删除技能时,它不能这样做,因为ScenarioSkill表的SkillID列上存在引用约束。 谁能帮我?

我在C#asp.net 3.5 Web应用程序解决方案上使用NHibernate 2。

除非我错误地阅读了这个问题,否则您需要在删除技能或场景之前删除相关的ScenarioSkills。 它非常简单,您只需要一个自定义方法来删除关联的ScenarioSkill对象,然后再删除父记录。

你想让它自动删除吗?

您需要在Skills多对多链接到ScenarioSkills上设置cascade="all-delete-orphan" 。 就像听起来一样,它会删除孤立的记录并防止弹出错误。

作为旁注,应谨慎使用多对多。 大多数的man-to-manys包含关系中的其他信息,并且更好地映射为一对一的man-to-manys。

这里的最后答复稍晚,但这是我最终成功实施的映射。

在场景中

      

在技​​能