2011-07-12 4 views
1

Je fais d'abord SaveChanges et vole l'exception (UpdateException). Et je fais le deuxième SaveChanges et againe fliyng premier erorr. Que faire à ce sujetComment annuler SaveChanges

bool isUpdate = false; 
var resource = new Resource() { url = tbUrl.Text }; 
//block1 
try 
{ 
    context.Resource.AddObject(resource); 
    context.SaveChanges(); 
    isUpdate = true; 
} 
catch (UpdateException ex) 
{ 

} 

//block2 
if (!isUpdate) 
{ 
    resource = (from res in context.Resource where res.url == tbUrl.Text select res).First(); 
    context.NameToResourcer.AddObject(new NameToResourcer() 
        { 
         id_resource = resource.id, 
         name = tag 
        }); 
    context.SaveChanges();//error! 
} 

Répondre

2

Vos appels à SaveChanges doit être enveloppé dans une transaction. Typiquement en utilisant un TransactionScope. Vous pouvez ensuite annuler la transaction si l'un des appels à SaveChanges échoue.


Edit:

Pour quelques exemples, voir ces 2 pages MSDN:

System.Transactions.TransactionScope Class

How to: Manage Transactions in the Entity Framework

+0

Je suis où vous avez entendu parler, vous pouvez goûter ? – Mediator

+0

Voir le Modifier dans ma réponse ci-dessus. J'ai ajouté quelques liens utiles qui ont des exemples en eux. – CodingWithSpike