 <p>Turns out that if we do not need IList semantics and can make do with ICollection the update problem can be solved by adding a reference back from Lesson to Module, such as:</p> <pre><code>public class Lesson { ... protected virtual ICollection&lt;Module&gt; InModules { get; set; } ... } </code></pre> <p>And to the mapping files add:</p> <pre><code>&lt;class name="Lesson" table="Lessons"&gt; ... &lt;set name="InModules" table="ModuleToLesson"&gt; &lt;key column="lessonId"/&gt; &lt;many-to-many column="moduleId" class="NhLists.Module, NhLists"/&gt; &lt;/set&gt; &lt;/class&gt; </code></pre> <p>Then a <code>Lesson</code> deleted is also removed from the collection in <code>Module</code> automatically. This also works for lists but the list index is not properly updated and causes "holes" in the list.</p>