1

最初に SaveChanges を作成し、例外 (UpdateException) を飛ばします。そして、2 回目の 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!
}
4

1 に答える 1

2

への呼び出しSaveChangesは、トランザクションでラップする必要があります。通常はTransactionScope. SaveChanges の呼び出しの 1 つが失敗した場合は、トランザクションをロールバックできます。


編集:

いくつかの例については、次の 2 つの MSDN ページを参照してください。

System.Transactions.TransactionScope クラス

方法: Entity Framework でトランザクションを管理する

于 2011-07-12T20:17:58.183 に答える