Как игнорировать ошибки в 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;