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。
这里的最后答复稍晚,但这是我最终成功实施的映射。
在场景中
在技能