2012-11-27 5 views
0

아이템을 iset에 추가하려고 시도하지만 일어나지 않습니다.iesi.collections.generic.iset에 아이템을 추가 할 수 없습니다.

var controlPoint = new ControlPoint {Lon = 53.25253, Lat = 56.23422, Radius = 16}; 
//controlPoint.ApprovedRoutes = new HashedSet<ApprovedRoute>(); 
controlPoint.Save(); 

var route = new ApprovedRoute(); 
route.ControlPoints = new HashedSet<ControlPoint>(); 
route.ControlPoints.Add(controlPoint); 
route.Name = "sometext"; 
route.Save(); 

//controlPoint.ApprovedRoutes.Add(route); 
//controlPoint.Save(); 

클래스 :

public class GeoPoint: Entity<long> 
{ 
    public virtual double Lon { get; set; } 
    public virtual double Lat { get; set; } 
} 

public class ControlPoint: GeoPoint 
{ 
    public virtual double Radius { get; set; } 
    public virtual Iesi.Collections.Generic.ISet<ApprovedRoute> ApprovedRoutes { get; set; } 
} 

public class ApprovedRoute : Entity<long> 
{ 
    public virtual string Name { get; set; } 
    public virtual Iesi.Collections.Generic.ISet<ControlPoint> ControlPoints { get; set; } 
} 

여기에 매핑 :

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Transport" namespace="Transport.Models"> 
    <class name="GeoPoint" table="GeoPoint"> 
    <id name="Id"> 
     <column name="id" not-null="true" /> 
     <generator class="identity" /> 
    </id> 
    <property name="Lon" /> 
    <property name="Lat" /> 

    <joined-subclass name="ControlPoint" table="ControlPoint"> 
     <key column="Id"/> 
     <property name="Radius"/> 

     <set name="ApprovedRoutes" table="M_ApprovedRoute_ControlPoint" inverse="true"> 
     <key column="PointId"></key> 
     <many-to-many column="RouteId" class="ApprovedRoute" /> 
     </set> 

    </joined-subclass> 
    </class> 
</hibernate-mapping> 

하나 더 : 내가 잘못 뭘하는지

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Transport" namespace="Transport.Models"> 
    <class name="ApprovedRoute" table="ApprovedRoute"> 
    <id name="Id"> 
     <column name="id" not-null="true" /> 
     <generator class="identity" /> 
    </id> 
    <property name="Name" /> 
    <set name="ControlPoints" table="M_ApprovedRoute_ControlPoint"> 
     <key column="RouteId"></key> 
     <many-to-many column="PointId" class="ControlPoint" /> 
    </set>  
    </class> 
</hibernate-mapping> 

? ControlPoint 및 ApprovedRoute 레코드는 테이블에 나타나지만 M_ApprovedRoute_ControlPoint는 여전히 비어 있습니다.

p.s. .Save()는 Session.SaveOrUpdate (obj)를 호출합니다.

답변

0

너무 쉽습니다. 난 그냥 트랜잭션에 SaveOrUpdate 래핑 이제는 일이야!

using (ITransaction tx = Session.BeginTransaction()) 
     { 
      try 
      { 
       Session.SaveOrUpdate(obj); 
       Session.Flush(); 
       tx.Commit(); 
      } 
      catch (HibernateException) 
      { 
       tx.Rollback(); 
       throw; 
      } 
     } 
관련 문제