NHibernate를 통해 컬렉션을 검색 할 때 .RemoveAll
을 사용할 수 없다는 문제가 있습니다.NHibernate : 컬렉션에서 .RemoveAll 호출하기
NHibernate를 통해 지속되는 Order
이라는 엔티티가 있습니다.
Order
은 많은 OrderItems
입니다. 다음과 같이 내 도메인에서
mapping.HasMany(o => o.Items)
.Cascade.AllDeleteOrphan()
.AsList()
.Inverse();
: 다음은이 관계에 대한 내 매핑은
public virtual IList<OrderItem> Items { get; set; }
내가 알고있는 것처럼, 내가 NHibernate에이 목록의 자신의 구현입니다 때문에 IList
을 사용해야합니다.
지금 내 Order
클래스에이 방법을 사용하여 내 Order
에서 항목을 제거하려면 :
public virtual void RemoveItem(string variantSku)
{
items.RemoveAll(x => x.Variant.VariantSku == variantSku);
}
그것은 작동하지 않습니다, IList
이 방법이 없기 때문에.
items.ToList().RemoveAll(x => x.Variant.VariantSku == variantSku);
을하지만 그것은 작동하지 않습니다
나는 시도했다. 나는items.ToList()
실제로 원래 목록의 복사본을 생성 실현, 그래서 내가 시도 할 수 같아요
var itemsList = items.ToList();
itemsList.RemoveAll(...)
하지만 여전히 NHibernate에를 통해 지속 하는가?
내 질문 :이 문맥에서 실제로 .RemoveAll
을 사용할 수 있습니까? 아니면 다른 방법으로 항목을 제거해야합니까?
매핑이 .ascest.AllDeleteOrphan() 인 경우 item.Order = null이 필요한지 잘 모르겠습니다. AllDeleteOrphan()이하는 일이 아닙니까? 나머지는 그 자리에 있습니다. 항목을 foreach'ing하고 제거하려고하는 모범생 실수하고 있었다. – autonomatt
item.Order = null은이를 고아로 만드는 요소이며, 그렇지 않으면 세션을 플러시 할 때 다시 저장됩니다. –
실제로 코드가 작동하지 않습니다. 여전히 예외가 발생합니다. "컬렉션이 수정되었습니다. 열거 연산이 실행되지 않을 수 있습니다. "for 루프를 사용하여 종료되었습니다. – autonomatt