2011-07-12 3 views
0

example1を参照してください。データの一部が誤って入力された場合、EF4は生き残ることはできません。SaveChange EF4のエラーを無視する方法

質問:1つのレコードのエラーを無視して継続するかどうか。

例1:

foreach (var tag in split) 
{ 
    context.NameToResourcer.AddObject(new NameToResourcer() 
    { 
     id_resource = resource.id, 
     name = tag 
    }); 
} 
context.NameToResourcer.AddObject(new NameToResourcer() 
{ 
    id_resource = resource.id, 
    name = ExtractDomainNameFromURL(resource.url) 
}); 
try 
{ 
    context.SaveChanges(); 
} 
catch (UpdateException ex) 
{ 

} 
catch (Exception ex) 
{ 

    throw; 
} 

例2の代替:

foreach (var tag in split) 
{ 
    try 
    { 
     context.NameToResourcer.AddObject(new NameToResourcer() 
     { 
      id_resource = resource.id, 
      name = tag 
     }); 
     context.SaveChanges(); 
    } 
    catch (UpdateException ex) 
    { 

    } 
} 
try 
{ 
    context.NameToResourcer.AddObject(new NameToResourcer() 
    { 
     id_resource = resource.id, 
     name = ExtractDomainNameFromURL(resource.url) 
    }); 
    context.SaveChanges(); 
} 
catch (UpdateException ex) 
{ 

} 

答えて

3

コンテキストは、作業の単位のように振る舞います。つまり、データを変更してSaveChangesへの1回の呼び出しで格納すると、EFにアトミック操作が必要であることを伝えています。すべての変更が正常に保存されるか、すべての変更がロールバックされます。 EFは内部的にトランザクションを使用してこの動作をサポートします。この動作を望まない場合は、SaveChangesへの1回の呼び出しですべてのデータを保存することはできません。アトミックデータセットごとに別々の呼び出しを使用する必要があります。

+0

これを行うことができるはずです – Mediator

+1

これは複数のSaveChangesを使用して行うことができます。私はよりよい解決策を知らない。 –

+0

どのようにデータの各アトミックなセットに対して別々の呼び出しを使用できますか? – SamekaTV

0

可能な解決策の1つは、保存時の検証を無効にすることです。しかし、私は推奨しません。

db.Configuration.ValidateOnSaveEnabled = false; 
関連する問題