Tengo una relación muchos a muchos:¿Cómo eliminar en una relación de muchos a muchos?
El producto tiene muchas categorías y la categoría tiene muchos productos.
Decir que tengo
Shopping Category
Food Category
Product A - Shopping Category, Food Category
Product B - Shopping Category
Ahora borro Shopping Category
. Quiero que la referencia Product A
se elimine de Shopping Category
y deseo que Product B
se elimine por completo.
que iba a terminar con:
Product A - Food Category.
¿Cómo se hace esto en nhibernate (estoy usando NHibernate fluidez).
Traté de usar Cascade DeleteOrphan
y AllDeleteOrphan
pero cuando lo hago y elimino Shopping, tanto el Producto A como el B se eliminan.
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();
No entiendo. Pensé que saveUpdate lo guardaría y no estoy seguro de a qué se refiere con eliminar la entidad de la colección. Podría tener miles de productos que necesitan que se eliminen sus referencias cuando elimine la catergoría, así que esto parece ser lo que sería una cascada para que yo tenga que hacerlo. – chobo2
Puede que haya entendido mal su pregunta, pero definitivamente puedo ver por qué 'DeleteOrphan' y' AllDeleteOrphan' eliminan el Producto A en esta instancia. 'SaveUpdate' solo eliminará las asociaciones (las muchas a muchas entradas de la tabla ...' product_category') pero no eliminará 'Product A'. Esto es algo que tendría que manejar manualmente al usar esta configuración de cascada. No creo que haya una cascada que maneje esto (aunque podría estar equivocado). –
Hmm tendré que intentarlo, pero pensé que DeleteOrphan era exactamente para esta situación. No lo veo como para mí. El Producto A no es huérfano ya que todavía tiene una relación con algo. – chobo2