J'ai un scénario dans un système que j'ai essayé de simplifier du mieux que je peux. Nous disposons d'un tableau d'artefacts (appelons-les), d'artefacts accessibles par n'importe quel nombre de rôles de sécurité et de rôles de sécurité pouvant accéder à n'importe quel nombre d'artefacts. En tant que tel, nous avons 3 tables dans la base de données - l'une décrivant les artefacts, l'autre décrivant les rôles et une table d'association many-to-many reliant l'ID de l'artefact à l'ID du rôle.Plusieurs à supprimer cascade dans NHibernate
Domaine, nous avons deux classes - un pour un rôle et un pour un artefact. la classe artefact possède une propriété IList qui renvoie une liste de rôles pouvant y accéder. (Les rôles n'offrent cependant pas de propriété permettant d'obtenir des artefacts accessibles). En tant que tel, le mappage de nhibernate pour artefact contient ce qui suit:
<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>
Tout cela fonctionne très bien et si je supprime un artefact, la table d'association est nettoyé de façon appropriée et toutes les références entre l'artefact supprimé et les rôles sont supprimés (le rôle n'est pas supprimé cependant, correctement - comme nous don ne veux pas que les orphelins soient supprimés).
Le problème est - comment supprimer un rôle et lui faire effacer la table d'association automatiquement. Si j'essaie actuellement de supprimer un rôle, j'obtiens une contrainte de référence car il y a toujours des entrées dans la table d'association pour le rôle. La seule façon de supprimer un rôle est de rechercher tous les artefacts liés à ce rôle, de supprimer le rôle de la collection de rôles de l'artefact, de mettre à jour les artefacts, puis de supprimer le rôle - pas très efficace ou agréable. système simplifié, les rôles peuvent être associés à un nombre quelconque d'autres tables/objets.
Je dois être en mesure d'indiquer à NHibernate que je veux effacer cette table d'association chaque fois que je supprime un rôle - est-ce possible, et si oui, comment le faire?
Merci pour toute aide.
Bonjour, dans votre solution, devez-vous créer trois classes Role, RolesToAccess et Access? Connaissez-vous une solution avec seulement deux classes Role and Access? –