2012-06-27 2 views
3

Fluent NHibernate에서 Automapper를 사용하여 NHibernate에서 join 레코드를 저장하기 위해 many to many 관계를 얻으려는 데 문제가있다.Fluent NHibernate 많은 사람들이 저장하지 않는다

S.O에 대한 다른 게시물이 많이 있지만 지금까지 아무도 다른 방법으로 뭔가를하고 있는지 궁금해하지 못했습니다.

지도를 설정할 앱이 있습니다. DB에 가입 레코드를 수동으로 만들면 데이터가 반환되므로 읽기 수준에서 올바르게 매핑되지만 관계가 유지되지 않습니다.

다음은 관련 매핑입니다. 나는 자동 협업을 기본 협약과 함께 사용하고 있었지만 결국 다른 SO 게시물을 기반으로 이것을 시도했다.

.Mappings(m => { 
         m.AutoMappings.Add(AutoMap.AssemblyOf<User>); 
         m.AutoMappings.Add(AutoMap.AssemblyOf<PostalCode>); 
         m.AutoMappings.Add(
           AutoMap.AssemblyOf<VPA>() 
            .Override<VPA>(v => 
             v.HasManyToMany(x => x.PostalCodes) 
              .Table("PostalCodesToVPAs") 
              .ParentKeyColumn("PostalCode_Id") 
              .ChildKeyColumn("VPA_Id") 
              .Cascade.SaveUpdate()) 
            .Override<PostalCode>(p => 
             p.HasManyToMany(x => x.VPAs) 
              .Table("PostalCodesToVPAs") 
              .ParentKeyColumn("VPA_Id") 
              .ChildKeyColumn("PostalCode_Id") 
              .Cascade.SaveUpdate().Inverse()) 
          ); 
        }) 

실제로 저장하는 방법은 다음과 같습니다. 명시 적으로 우편 번호와 vpa를 모두 저장하고 있기 때문에 잔인한 행동 일지 모르지만 매핑에서 역행렬 문제가있는 사람들에 대해 많이 읽으므로 둘 다 시도하고 싶었습니다. 그것은 작동하지 않았다.

var postalCode = new PostalCode {Value ="90210", CreatedBy = 0, CreationDate = DateTime.Now, ModifiedBy = 0, ModifiedDate = DateTime.Now}; 
vpa.PostalCodes.Add(postalCode); 
postalCode.VPAs.Add(vpa); 
PostalCodeService.Save(postalCode); 
VPAService.Save(vpa); 

는 service.save 호출 할 내부적으로

return (int)Session.Save(obj); 

는 사람이 본과 조인 레코드를 저장하지 않을 이유를 알고 했습니까?

답변

4

해결 방법을 알아내어 누구나 같은 문제가 발생하면 업데이트하고 싶습니다.

트랜잭션에서 저장 호출을 랩핑해야합니다. 그렇지 않으면 결합 레코드를 확약하지 않습니다. 해당 서비스 코드를 수정하여 끝 냈습니다.

using (var tx = Session.BeginTransaction()) { 
    Session.Save(obj) 
    tx.commit(); 
    return obj.Id; 
}