2011-08-23 5 views
1

패키지와의 관계가 많은 Shape 클래스가 있습니다. 이 양방향 관계의 의미는, Product가 특정의 Shape를 가지는 경우, 그 Shape가 관련 지을 수 있었던 Packages에 의해 Packaged 될 수있는 것입니다. 패키지가 패키지에 의해 패키지화되고있는 경우는, 역도에 적용됩니다. 이것은,이 Product가이 Package와 관련한 Shape가 아니면 안되는 것을 나타냅니다.NHIbernate 양방향 many to many 매핑 삽입 업데이트 문제

따라서 Shape가 포함 된 패키지 및 패키지가 포함 된 도메인 모델이 있습니다. 따라서 NH 매핑은 Shape, Package 및 PackageToShape 테이블을 생성합니다.

그러나 버전 관리를 적용하면 PackageToShape 테이블에 여러 개의 업데이트와 삽입이 발생합니다. 사실, 예를 들어 ShapeId = 1, PackageId = 1과 같은 관계가 먼저 제거 된 다음 다시 삽입됩니다. 실제로 Guides를 사용합니다. 하지만 요점은이 설치 NH는 행을 삭제 한 다음 다시 똑같은 행을 추가하는 여러 테이블에 여러 삭제 및 삽입 문을 작성한다는 것입니다!

이런 일이 발생하지 않도록하는 방법이 있습니까 ?? (유창함 NH 사용)

매핑 패키지에 대한

public sealed class ShapeMap: EntityMap<Shape, Guid, ShapeDto> 
{ 
    public ShapeMap() 
    { 
     HasManyToMany(s => s.Packages) 
      // Fetch.Join will raise laizy collection load error 
      .Fetch.Select() 
      .AsSet() 
      .Cascade.All(); 
     HasManyToMany(s => s.UnitGroups) 
      // Fetch.Join will raise laizy collection load error 
      .Fetch.Select() 
      .AsSet() 
      .Cascade.All(); 
     HasManyToMany(s => s.Routes) 
      // Fetch.Join will raise laizy collection load error 
      .Fetch.Select() 
      .AsSet() 
      .Cascade.All(); 
    } 

매핑 :

public class PackageMap : EntityMap<Package, Guid, PackageDto> 
{ 
    public PackageMap() 
    { 
     Map(p => p.Abbreviation).Not.Nullable().Length(30).Unique(); 
     HasManyToMany(p => p.Shapes) 
      // Fetch.Join will raise laizy collection load error 
      .Fetch.Select() 
      .AsSet() 
      .Inverse() 
      .Cascade.All(); 
    } 
} 

법인 맵 ID, 이름 (고유) 및 버전 매핑을 구현합니다.

답변

0

나는이 문제를 발견했다. 컬렉션의 설정자에서 나는 새 목록을 만들었고 분명히 이것을 NH와 함께 할 수는 없습니다. 내 내부 HashSet을 IEnumerable로 외부 세계에 노출하고 싶었습니다. 그렇게하는 것이 바람직한 방법이라고 생각합니다.

protected set { _mySet = new HashSet(value); } 

내가 NH 네이티브 닷 넷 4 ISET를 지원하지 않는 것이 었 다 퉜다 두 번째 문제 : 이러한 컬렉션을 내 보호 세터에서 나는 다음과 같은 코드를 가지고 있었다. NH 제공 세트 (Iesi.Collections.Generic.ISet)를 구현해야합니다.

NH에서 제공 한 컬렉션에서 새 내부 컬렉션을 만들었 기 때문에 NH는 생각했습니다. 좋아,이 컬렉션은 동일하지 않습니다. 따라서이 개체는 더럽습니다. 따라서 버전을 업데이트하고 이러한 변경을 계단식으로 시작하십시오. .

내가 물었던이 질문은 내가 씨름하고있는 딜레마를 요약했지만 지금은 해결 된 것처럼 보입니다. Approach to handle business collections

관련 문제