как игнорировать ошибки в SaveChange EF4 - PullRequest
0 голосов
/ 12 июля 2011

Пожалуйста, смотрите пример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 ]

3 голосов
/ 13 июля 2011

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

0 голосов
/ 20 ноября 2015

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

db.Configuration.ValidateOnSaveEnabled = false;
...