nhibernate以三元关系保存词典

nhibernate以三元关系保存词典,nhibernate,Nhibernate,类别: 当我使用不同的角色执行上一个命令后,我得到“已添加具有相同密钥的项”错误 有没有办法插入第二行 编辑: 映射: 错误消息是正确的:您正在向字典添加重复的密钥 它甚至不是来自NHibernate——它是由字典类生成的 如果一个轨迹可以在多个角色中具有相同的人物,则必须将轨迹(人物)角色表映射为一个实体: UPDATE trackpeoplerole SET track_id = 47637 /* ?p0 */ WHERE people_id = 10 /* ?p1 */ AND role_

类别:

当我使用不同的角色执行上一个命令后,我得到“已添加具有相同密钥的项”错误

有没有办法插入第二行

编辑:
映射:


错误消息是正确的:您正在向字典添加重复的密钥

它甚至不是来自NHibernate——它是由
字典
类生成的

如果一个
轨迹
可以在多个
角色
中具有相同的
人物
,则必须将
轨迹(人物)角色
表映射为一个实体:

UPDATE trackpeoplerole SET track_id = 47637 /* ?p0 */
WHERE people_id = 10 /* ?p1 */ AND role_id = 2 /* ?p2 */
班级轨道
{
...
公共虚拟ICollection人物角色{get;set;}
}
类TrackPeopleRole
{
公共虚拟人{get;set;}
公共虚拟角色{get;set;}
}
映射:

class Track
{
    ...
    public virtual IDictionary<People, Role> PeopleRoles { get; set; }
}
class Track
{
    ...
    public virtual ICollection<TrackPersonRole> PeopleRoles { get; set; }
}

class TrackPeopleRole
{
    public virtual Person Person { get; set; }
    public virtual Role Role { get; set; }
}

...

关于
级联
还有更多的细节,但是从这个开始。

我编辑了我的问题。我现在得到的是update语句,而不是insert语句
    Person p = PersonManager.GetById(10);
    Role pr = RoleManager.GetById(2);
    Track t = TrackManager.GetById(47637);

    t.PeopleRoles.Add(p, pr);
    TrackManager.Save(t);
<class name="TrackPersonRole, App.Data" table="trackpeoplerole" lazy="true">
    <composite-id>
    <key-many-to-one name="Person" class="Person" column="people_id"/>
    <key-many-to-one name="Role" class="Role" column="role_id"/>
    </composite-id>
</class>

<class name="Track" ...>
 ...
 <bag name="TrackPeopleRoles">
     <key column="track_id"/>
     <one-to-many class="TrackPersonRole"/>
 </bag>
</class>


    TrackPersonRole tpr = new TrackPersonRole();
    tpr.Person = PersonManager.GetById(10);
    tpr.Role = RoleManager.GetById(2);
    entity.PeopleRoles.Add(tpr);
    TrackManager.SaveOrUpdate(entity);
UPDATE trackpeoplerole SET track_id = 47637 /* ?p0 */
WHERE people_id = 10 /* ?p1 */ AND role_id = 2 /* ?p2 */
class Track
{
    ...
    public virtual ICollection<TrackPersonRole> PeopleRoles { get; set; }
}

class TrackPeopleRole
{
    public virtual Person Person { get; set; }
    public virtual Role Role { get; set; }
}
<class name="Track" ...>
  ...
  <bag name="TrackPeopleRoles">
    <key column="track_id"/>
    <one-to-many class="TrackPersonRole"/>
  </map>
</class>