2009-05-09 3 views
1

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é

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

Répondre

1

Ce fut cross-posted on the Fluent NHibernate group et répondue par Hudson Akridge. Comme Hudson l'a dit, la solution est d'utiliser Clear() sur la collection car cela permet à NHibernate de suivre les changements (alors que la mise à jour de la collection amène la propriété à référencer une instance que NH ne connaît pas).

+0

Merci Stuart. J'ai également vu la réponse sur le groupe FNH, et Clear a en fait résolu mon problème. – nkirkes

Questions connexes