Je suis en train de construire un système de rôle modifié qui a la structure de classe/relation suivante:Mise à jour d'un à plusieurs avec Fluent NHibernate
Projet ProjectRole employé
où
ProjectEmployee cartographie les trois entités ensemble.
J'ai un mappage un-à-plusieurs de Project à ProjectEmployee et un mappage de référence de ProjectEmployee à Project.
Je peux ajouter de nouveaux ProjectEmployee très bien (ce qui signifie que mes activités de création sont bien aussi), mais je veux contraindre la relation à n'avoir qu'une seule entrée par employé. Cela affecte la logique de mes activités de mise à jour.
Dans le piratage cela ensemble, je tente de vider les Project.ProjectEmployees (en définissant la valeur à une nouvelle liste), puis en ajoutant une nouvelle instance de ProjectEmployee avec le rôle approprié, etc.
En faisant cela , J'obtiens une erreur liée à la définition de Project.ProjectEmployees dans une liste vide.
"Impossible d'insérer la valeur NULL dans la colonne" ProjectId ", la table" AppDB.dbo.ProjectEmployees "; la colonne n'autorise pas les valeurs NULL UPDATE échoue L'instruction a été interrompue."
Si je supprime la ligne de cette liste, les enregistrements suivants sont ajoutés, mais je regarde trop d'enregistrements par employé.
Voici mon projet -> mapping ProjectEmployees:
mapping.HasMany<ProjectEmployee>(x => x.ProjectEmployees)
.Cascade.All()
.WithKeyColumn("ProjectId");
Et la mise en correspondance dans ProjectEmployee -> Projet:
devrait être simple droit?
Pour ce que cela vaut, j'ai également ajouté une méthode à ma classe Project appelée AddProjectEmployee qui recherche l'employé en question, supprime son ProjectEmployee s'il existe, puis ajoute le nouveau ProjectEmployee. J'ai la même erreur quand j'appelle ça.
Toute aide serait appréciée.
Nick
Merci Stuart. J'ai également vu la réponse sur le groupe FNH, et Clear a en fait résolu mon problème. – nkirkes