2011-04-01 4 views
1

콜렉션을 업데이트하는 방법을 잘 모르겠습니다. 나는이 개 테이블이 :NHibernate 콜렉션 맵핑 : 업데이트 대신 삭제 및 삽입합니다

  • 는 객체 - 3 개의 int
  • ObjectAliases의 복합 PK있다 - 객체에 대한 FK와 이름에 대한 NVARCHAR의 PK를 가지고, 분명히 이름은

개체 수있는 고유 많은 별칭을 가지고 있지만 별칭 이름은 각 개체마다 고유합니다.

그래서 내 객체에 별명을 나열 할 필요가있다, 그래서 내가 한 :

public virtual IList<string> Aliases { get; set; } 

내 매핑은 다음과 같습니다

<bag name="Aliases" table="Aliases" cascade="all-delete-orphan" lazy="true"> 
    <key> 
    <column name="OtpadId_Djelatnost" sql-type="nvarchar"/> 
    <column name="OtpadId_Proces" sql-type="nvarchar"/> 
    <column name="OtpadId_Vrsta" sql-type="nvarchar"/> 
    </key> 
    <element column="Ime" type="String"/> 
</bag> 

내가 만들고 문제없이 별칭 목록에서 개체를 삭제할 수 있습니다, Nhibernate는 벌금을 삽입하고 삭제합니다. 하지만 별칭의 이름을 바꾸려면 어떻게해야합니까? 내가 FK 별칭을 이름으로하고 별칭의 이름을 바꿀 때 NHibernate가 SQL UPDATE를 할 수 있도록 CASCADE가 새로운 이름을 참조하는 모든 FK에서 실행되도록합니다.

내가 할 경우

object.Aliases[0] = "test"; 

NHibernate에이 INSERT 대신 업데이트를 수행하려고 할 것입니다 .. 나는 그것을 업데이트를 수행 할 수있는 방법?

감사합니다.

답변

1

봉투는 순서가 지정되지 않고 색인화되지 않은 컬렉션 (http://www.nhforge.org/doc/nh/en/index.html#collections-mapping)입니다. 그래서 nhibernates가 삭제 한 콘텐츠가 콘텐츠를 재생성한다는 사실에서 비롯된 것 같습니다.

+0

당신은 완전히 옳다. 나는이 인용문을 발견했다. "NHibernate는 개별 행을 식별하는 데 사용할 수있는 키가 없기 때문에 행을 개별적으로 생성, 삭제 또는 업데이트 할 수 없다." .. 색인 된 컬렉션 및 보고서를 사용해 보겠습니다. –

+0

나는 당신이 이것을 할 수 없다는 것을 발견했다. (가지고있는 테이블 구조로). 인덱스 된 목록을 사용하려고하면 요소 열과 같을 수없는 인덱스 열이 필요합니다. 마지막으로 나는 inverse = "true"를 목록에두고 업데이트 별칭을 직접 관리하여 해결했습니다. –

관련 문제