2010-10-02 29 views
0

J'utilise des DTO et des convertisseurs dans un scénario de structure d'entité. Je veux mettre à jour une entité. Donc, je mets cette déclaration: databasecontext.Tablename(s).Attach(entityobj); Chaque fois qu'il arrive ici le programme se termine par cette erreur: An entity with the same identity already exists in this EntitySet.Qu'est-ce qui me manque? (Une entité avec la même identité existe déjà dans cet EntitySet.)

J'ai senti que je pouvais contourner ce problème en disant databasecontext.Tablename(s).Detach(entityobj); avant d'appeler à nouveau Attacher. Mais le programme échoue toujours sur l'instruction Attach.

Qu'est-ce qui me manque? Quelle méthode sur le contexte DB appelle Mise à jour dans le service de domaine?

Répondre

0

Il semble que vous gardiez le contexte ouvert pendant que vous apportez les modifications.

Dans ce cas, vous n'avez pas besoin de rattacher l'objet au contexte.

Si vous ouvrez un contexte, récupérez un objet dans un contexte, fermez le contexte, apportez quelques modifications à l'objet, puis ouvrez un nouveau contexte. Dans ce cas, vous devez attacher l'objet au contexte.

1

La question n'est pas claire. Vous n'avez pas mentionné combien de temps dure votre contexte de base de données et quand avez-vous chargé l'entité dans le contexte.

Mais en fonction de votre question, je suppose que vous avez chargé l'entité quelque part comme DTO et lorsque le DTO est retourné, vous utilisez toujours le même contexte. Vous convertissez DTO en entité et vous essayez de l'attacher à nouveau = > BANG exception. La même entité ne peut pas être placée deux fois dans le contexte. Essayez d'utiliser ObjectContext.ApplyCurrentValues ​​à la place (EF 4.0) ou ApplyPropertyChanges (EF 1.0).