NHibernateを使用した多対多のマッピングに問題があります。基本的に、オブジェクトモデルには2つのクラス(ScenarioとSkill)があり、データベースの3つのテーブル(Scenario、Skill、ScenarioSkill)にマッピングされています。SequenceSkillsテーブルは、SKillおよびScenarioテーブルのID(SkillID、ScenarioID)を保持するだけです。
オブジェクトモデルでは、シナリオにはいくつかの一般的なプロパティと、ScenarioSkillsテーブルから取得される関連スキルのリスト(IList)があります。Skillオブジェクトに関連付けられたシナリオのIListはありません。
シナリオとスキルからシナリオスキルへのマッピングは、多対多の関係です。
シナリオ*---*シナリオスキル*---*スキル
これが私が読んだものから使用するための最良のオプションであると信じているので、私はリストをバッグとしてマップしました。マッピングは次のとおりです。
シナリオクラス内
<bag name="Skills" table="ScenarioSkills">
<key column="ScenarioID" foreign-key="FK_ScenarioSkill_ScenarioID"/>
<many-to-many class="Domain.Skill, Domain" column="SkillID" />
</bag>
そしてスキルクラス内
<bag name="Scenarios" table="ScenarioSkills" inverse="true" access="noop" cascade="all">
<key column="SkillID" foreign-key="FK_ScenarioSkill_SkillID" />
<many-to-many class="Domain.Scenario, Domain" column="ScenarioID" />
</bag>
スキルを削除しようとした場合を除いて、すべて正常に機能します。ScenarioSkillテーブルのSkillID列に参照制約があるため、削除できません。誰か助けてもらえますか?
C#asp.net3.5WebアプリケーションソリューションでNHibernate2を使用しています。