Tengo un escenario en un sistema que he tratado de simplificar lo mejor que puedo. Tenemos una tabla de artefactos (le permite llamar), se puede acceder a los artefactos por cualquier cantidad de roles de seguridad y los roles de seguridad pueden acceder a cualquier cantidad de artefactos. Como tal, tenemos 3 tablas en la base de datos, una que describe artefactos, una que describe roles y una tabla de asociación de muchos a muchos que vincula la identificación del artefacto con la Identificación del rol.Eliminar muchos en cascada muchos en NHibernate
En cuanto al dominio, tenemos dos clases: una para un rol y otra para un artefacto. la clase artefacto tiene una propiedad IList que devuelve una lista de roles que pueden acceder a ella. (Los roles, sin embargo, no ofrecen una propiedad para obtener artefactos a los que se pueda acceder).
Como tal, el mapeo nhibernate para artefacto contiene lo siguiente;
<bag name="AccessRoles" table="ArtefactAccess" order-by="RoleID"
lazy="true" access="field.camelcase-underscore" optimistic-lock="false">
<key column="ArtefactID"/>
<many-to-many class="Role" column="RoleID"/>
</bag>
Todo esto funciona bien y si elimino un artefacto, la tabla de asociación se limpia de manera adecuada y se eliminan todas las referencias entre el artefacto eliminado y papeles (el papel no se elimina, sin embargo, correctamente - como don no quiero que los huérfanos sean eliminados).
El problema es cómo eliminar una función y hacer que aclare la tabla de asociación automáticamente. Si actualmente intento eliminar una función, obtengo una restricción de referencia ya que todavía hay entradas en la tabla de asociación para la función. La única forma de eliminar un rol con éxito es consultar todos los artefactos que se vinculen con ese rol, eliminar el rol de la colección de roles del artefacto, actualizar los artefactos y luego eliminar el rol, no muy eficiente o agradable, especialmente cuando se encuentra en el sistema simplificado, los roles pueden asociarse con cualquier cantidad de otras tablas/objetos.
Necesito poder indicarle a NHibernate que quiero que se despeje esta tabla de asociación cada vez que elimino una función, ¿es posible ?, y si es así, ¿cómo lo hago?
Gracias por cualquier ayuda.
Hola, en su solución, ¿tiene que crear tres clases Role, RolesToAccess y Access? ¿Conoces una solución con solo dos clases Role and Access? –