0

example1までご覧ください。一部のデータが正しく入力されない場合、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;
}

example2 代替:

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)
{

}
4

2 に答える 2

3

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

于 2011-07-12T21:44:44.663 に答える
0

考えられる解決策の 1 つは、保存時の検証を無効にすることですが、お勧めしません。

db.Configuration.ValidateOnSaveEnabled = false;
于 2015-11-20T09:07:37.377 に答える