2010-12-03 6 views
0

J'ai deux entités dans une relation plusieurs à un. Widget (1) < -> (*) Utilisateurs. Si pour une raison étrange il y a eu un Widget supprimé dans la base de données, où il n'y a pas de clé étrangère ou autre contrainte référentielle qui empêcherait un Utilisateur d'exister s'il n'y avait pas de Widget correspondant, je ne peux pas utiliser EF ObjectContext.DeleteObject(). Le message estEntity Framework - ObjectContext.DeleteObject() lorsque les entités associées sont orphelines

System.Data.UpdateException: Entities in '<Users>' participate in the '<UsersWidgets>' relationship. 0 related 'Widgets' were found. 1 'Widget' is expected. 
    at System.Data.Mapping.Update.Internal.UpdateTranslator.RelationshipConstraintValidator.ValidateConstraints() 

Existe-t-il une méthode recommandée pour gérer cela dans le code?

Merci!

Répondre

1

Vous devez modifier votre Entity Data Model (EDM) pour se conformer aux règles exprimées dans le schéma de base de données.

S'il n'y a pas de contraintes d'intégrité Réféfence entre le utilisateur et Widgets tables dans la base de données et la colonne de clé étrangère dans utilisateur est annulable, l'association entre les entités correspondantes dans l'EDM doit avoir une multiplicité de 0..1: * (zéro ou un-à-plusieurs).

En ce moment, il est probablement réglé sur 1: * (un à plusieurs) qui provoque l'erreur de validation, car, selon qu'un utilisateur est toujours attendu d'avoir exactement un associé Widget.

Ressources connexes:

0

Cette exception se produit généralement si vous avez un FK sur les utilisateurs pour Widgets, ce qui n'est pas NULL dans la base de données. Donc, la première chose que vous devriez vérifier est, si le FK est défini comme nullable sur les utilisateurs. Quelle base de données utilisez-vous? Je suis seulement au courant avec MSSQL Server 2008. Si oui, vérifiez quelles propriétés sont définies sur la relation dans la base de données. Vous pouvez définir une action UPDATE et DELETE sur une relation. Si vous ne voulez pas que l'utilisateur soit supprimé lorsque le Widget est supprimé, vous devez vérifier si la suppression en cascade est désactivée. Il existe également une option pour définir le widget sur l'utilisateur à null.

Questions connexes