0
등급 :NHibernate에
class Track
{
...
public virtual IDictionary<People, Role> PeopleRoles { get; set; }
}
매핑 :
<class name="Track" ...>
...
<map name="PeopleRoles" table="track_people_role">
<key column="track_id"/>
<map-key-many-to-many column="people_id" class="People"/>
<many-to-many column="role_id" class="Role"/>
</map>
</class>
나는 47637,10,1로 track_people_role 테이블에 삽입 된 행을 볼 수 있습니다 아래의 코드를 실행하면
Person p = PersonManager.GetById(10);
Role pr = RoleManager.GetById(1);
Track t = TrackManager.GetById(47637);
t.PeopleRoles.Add(p, pr);
TrackManager.Save(t);
다른 역할을 사용하여 이전을 실행할 때 "동일한 키를 가진 항목이 이미 있습니다. y가 추가되었습니다 "오류
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 */
나는 내 질문을 편집했습니다. 이제 insert 대신 update 문을 얻습니다. – Guray