Product에서 ICollection PriceBreaks를 삭제하고 싶습니다.nhibernate에서 fk children을 삭제하는 방법
다음 방법을 사용하고 있습니다. 그러나 그들은 삭제하지 않는 것 같습니다. 나는 무엇이 없는가. 내가 단계를 밟을 때. 나는 "product.PriceBreaks.Clear();" 실제로 항목을 지우지는 않습니다. 나는 물 내리는 것과 같은 것을 필요로합니까?
공공 무효 RemovePriceBreak (INT 제품 일련) {
using (ISession session = EStore.Domain.Helpers.NHibernateHelper.OpenSession())
using (ITransaction transaction = session.BeginTransaction())
{
var product = session.Get<Product>(productId);
// i can see 20 PriceBreak records, tho nh prof saids PriceBreak table hasn't been hit
product.PriceBreaks.Clear();
session.SaveOrUpdate(product);
transaction.Commit(); // PriceBreak table is hit here with select statement, no delete?
}
} 여기
내 HBM 파일
<class name="Product" table="Products">
<id name="Id" type="Int32" column="Id" unsaved-value="0">
<generator class="identity"/>
</id>
<property name="CompanyId" column="CompanyId" type="Int32" not-null="true" />
<property name="Name" column="Name"/>
<set name="PriceBreaks" table="PriceBreaks" generic="true" cascade="all-delete-orphan" inverse="true" >
<key column="ProductId" />
<one-to-many class="EStore.Domain.Model.PriceBreak, EStore.Domain" />
</set>
</class>
<class name="PriceBreak" table="PriceBreaks">
<id name="Id" type="Int32" column="Id" unsaved-value="0">
<generator class="identity"/>
</id>
<many-to-one name="Product" column="ProductId" not-null="true" class="EStore.Domain.Model.Product, EStore.Domain" />
</class>
내 엔티티
public class Product
{
public virtual int Id { get; set; }
public virtual ICollection<PriceBreak> PriceBreaks { get; set; }
public virtual void AddPriceBreak(PriceBreak priceBreak)
{
priceBreak.Product = this;
PriceBreaks.Add(priceBreak);
}
}
public class PriceBreak
{
public virtual int Id { get; set; }
public virtual Product Product { get; set; }
}
있습니다 여기 가 SELECT product0_.Id가 Id0_0_ 으로 제품의 product0_ //
nhprof에서 SQL은 WHERE product0_.Id = 23/* @ P0의 */
하고
SELECT pricebreak0_.ProductId ProductId1_, Id1_ 같은 pricebreak0_.Id, Id1_0_ 같은 pricebreak0_.Id, ProductId1_0_ 같은 pricebreak0_.ProductId, 같은 FROM PriceBreaks pricebreak0_ WHERE pricebreak0_.ProductId = 23/* @ P0 */
업데이트 또는 선택 사항 없음
흠, 이거 줘. 아직도 기쁨이 없습니다. 위의 질문을 새로운 방법으로 업데이트했습니다. – frosty
엔티티와이 두 엔티티 간의 관계를 관리하는 방법을 보여줄 수 있습니까? 컬렉션을 목록으로 노출하는 것 같습니다. 그 생각을 다시하고 싶을 수도 있습니다. 예를 들어 product.PriceBreaks [0] .product = someOtherProduct는 무엇을 의미합니까? – epitka
에픽카, 나는 entites를 추가했습니다. 목록에 표시 할 대안이 있습니까? – frosty