2011-01-21 11 views
0

을 삭제 ''NHibernate에 I (간결성을 위해 편집) '사진'개체에 대한 다음과 같은 매핑 파일이 있습니다계단식에 문제를 일으키는 절은

<hibernate-mapping ... default-access="property" default-cascade="none" default-lazy="true"> 
<class xmlns="urn:nhibernate-mapping-2.2" name="Photo" table="Photos"> 
    <id name="PhotoId" unsaved-value="0"> 
     <column name="PhotoId" /> 
     <generator class="native" /> 
    </id> 
    ... 
    <bag name="Comments" table="Comments" lazy="false" order-by="DateTimePosted desc" cascade="all-delete-orphan" inverse="true"> 
     <key column="PhotoId" /> 
     <one-to-many class="Comment" /> 
    </bag> 
</class> 

내가에 대한 Where 절을 적용 할을 'Comments'bag은 'Approved'속성이 true 인 댓글 만 검색합니다. 그러나 내가 이것을 가지고있을 때, Where 절의 조건을 충족시키지 못했기 때문에 삭제 된 Photo 객체가 삭제 된 승인되지 않은 주석 (그리고 고아 주석 레코드를 남기고있는)을 계단식으로 배열하지 않는 문제 시나리오에 대처했습니다! 본질적으로, 나는 계단식 삭제를 제외하고 where 절을 준수하기를 원했고,이 경우 사진 삭제와 관련하여 사진과 관련된 주석을 항상 삭제하고 싶었습니다.

<hibernate-mapping ... default-access="property" default-cascade="none" default-lazy="true"> 
<class xmlns="urn:nhibernate-mapping-2.2" name="Comment" table="Comments"> 
    <id name="CommentId" unsaved-value="0"> 
     <column name="CommentId"></column> 
     <generator class="native" /> 
    </id> 
    <property name="DateTimePosted" not-null="true" /> 
    ... 
    <property name="Approved" not-null="true" /> 
    <many-to-one name="Photo"> 
     <column name="PhotoId" /> 
    </many-to-one> 
</class> 

가 어떻게이 문제를 해결 얻을 수 있습니다 :

다음

내 댓글 매핑 파일의 편집 된 복사본입니까?

답변

1

NHibernate에 당신이 , 당신은 대신 컬렉션 항목을 얻을 수 filters를 사용할 필요 "절은 캐스 케이 딩을 제외하기 위해 준수해야 할 위치가 삭제 싶었다"고 추측 할 수 있기 때문이다.

대안

는 LINQ - 투 객체 프로젝션을 사용하고 있습니다 :

public virtual IEnumerable<Comment> ApprovedComments 
{ 
    get { return Comments.Where(c => c.Approved); } 
} 
+0

고마워 디에고. 나는 지금 LINQ-to-objects 접근법으로 갔고 그것이 필요한 것을 수행하는 것 같습니다. 감사. – marcusstarnes

관련 문제