나는 다 대다 관계가있다 :many to many 관계에서 삭제하는 방법?
내가 지금은제품에는 많은 종류가 있고 종류에는 많은 제품이있다.
Shopping Category
을 삭제
Shopping Category
Food Category
Product A - Shopping Category, Food Category
Product B - Shopping Category
을 말해봐.
Product A
참조를
Shopping Category
에서 삭제하고
Product B
을 완전히 삭제하고 싶습니다.
내가 끝낼 것 :
Product A - Food Category.
을 나는 (나는 유창한 NHibernate에 사용하고 있습니다) NHibernate에이 작업을 수행하려면 어떻게합니까.
캐스케이드 DeleteOrphan
과 AllDeleteOrphan
을 사용하려고했지만 쇼핑을 삭제하면 제품 A와 B가 모두 삭제됩니다.
public class CategoryMapping : ClassMap<Category>
{
public CategoryMapping()
{
Id(x => x.Id).GeneratedBy.GuidComb();
Map(x => x.Name).Not.Nullable().NvarcharWithMaxSize();
HasManyToMany(x => x.Products).Cascade.DeleteOrphan();
}
}
public class ProductMapping : ClassMap<Product>
{
public ProductMapping()
{
Id(x => x.Id).GeneratedBy.GuidComb();
Map(x => x.Name).Not.Nullable().NvarcharWithMaxSize();
HasManyToMany(x => x.Categories);
}
}
unitOfWork.BeginTransaction();
Category category =session.Load<Category>(id);
session.Delete(category);
unitOfWork.Commit();
나는 이해할 수 없다. 나는 saveUpdate가 그것을 재 저장하고 컬렉션에서 엔티티를 제거함으로써 무엇을 의미하는지 확신 할 수 없다고 생각했다. 나는 카타고리를 삭제할 때 제거해야 할 참조를 필요로하는 제품 1000 개를 가질 수 있으므로이 캐스케이드가 나 자신을 위해해야 할 일이 될 것 같다. – chobo2
질문에 대한 오해가 있었을 지 모르지만이 경우 DeleteOrphan 및 AllDeleteOrphan이 제품 A를 삭제하는 이유를 분명히 알 수 있습니다. 'SaveUpdate'는 연관 (많은 테이블 항목 ...'product_category')만을 삭제하지만'Product A'는 삭제하지 않을 것입니다. 이것은이 계단식 설정을 사용할 때 수동으로 처리해야하는 항목입니다. 나는 이것을 처리하는 캐스케이드가 있다고 생각하지 않는다. –
흠 나는 그것을 시험해야 할 것이다. 그러나 나는 DeleteOrphan이이 상황에 정확히 맞다고 생각했다. 나는 제품 A가 여전히 무언가와 관계가 있기 때문에 고아가 아니다. – chobo2