Как игнорировать ошибки в SaveChange EF4

Пожалуйста, смотрите на пример1. Если некоторые данные будут введены неправильно, EF4 не сохранится ни в одной записи.

Вопрос: стоит ли как-то игнорировать ошибку в одной записи и продолжать дальше.

example1:

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

}

2 ответа

Контекст ведет себя как единица работы. Это означает, что когда вы изменяете данные и сохраняете их с помощью одного вызова SaveChanges вы говорите EF, что вы хотите атомарную операцию - либо все изменения успешно сохранены, либо все изменения откатаны. EF использует транзакцию для поддержки этого поведения. Если вы не хотите этого поведения, вы не можете сохранить все данные с помощью одного вызова SaveChanges, Вы должны использовать отдельный вызов для каждого атомарного набора данных.

Одним из возможных решений является отключение проверки при сохранении. Но я не рекомендую это делать.

db.Configuration.ValidateOnSaveEnabled = false;
Другие вопросы по тегам