2010-11-23 5 views
0

J'ai créé un objet A, et je veux le stocker deux fois avec l'EF.EF (4) Détacher un objet du contexte, en dehors du contexte

J'ai donc une méthode Save(Order order) dans mon dépôt.

Mais quand je fais ceci:

Order order = new Order(); 
//set props here 
new Repository().Save(order); 
new Repository().Save(order); 

alors je reçois une erreur, car dans le premier enregistrer (l'ordre) conserve une référence au contexte. Puis-je, entre les deux appels Save, dire 's'il vous plaît vous libérer du contexte, et prétendre que vous êtes comme neuf avant la première sauvegarde()' afin que je puisse le sauvegarder à nouveau?

+1

Votre commande a-t-elle un identifiant unique? si c'est le cas, essayez de le mettre avant le 2ed save order.id = 0; –

+0

Oui, il a un identifiant unique. Je vais essayer ça aussi. – Michel

+0

Malheureusement, pas de chance: System.InvalidOperationException: La propriété 'OrderId' fait partie des informations clés de l'objet et ne peut pas être modifiée. – Michel

Répondre

1

Est-ce que context.Detach(order) ne fait pas l'affaire?

+0

je vais essayer. Est-ce seulement possible sur le CONTEXTE, pas sur l'OBJET (dans ce cas l'ordre) lui-même? – Michel

+0

@Michel - vous pouvez le faire sur le 'ObjectSet ' aussi (ce qui est préférable, comme avec '.Attach'). E.g 'ctx.Orders.Detach (commande)'. – RPM1984

+1

RPM est correct, mais bien sûr, avoir accès à 'ObjectSet' nécessitera à peu près le même effort de votre part que d'avoir accès à l'ensemble du contexte. Vous ne pouvez pas appeler Détacher sur une entité comme dans "Détachez-vous de votre contexte". – Jon

Questions connexes