请参见example1。如果某些数据输入不正确,EF4将无法生存,也无法记录。
问题:是否可以忽略一条记录中的错误并继续。
例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)
{
}
答案 0 :(得分:3)
上下文就像工作单元一样。这意味着当您修改数据并通过对SaveChanges
的单次调用存储它们时,您告诉EF您希望进行原子操作 - 要么所有更改都已成功保存,要么所有更改都会回滚。 EF在内部使用事务来支持此行为。如果您不想要此行为,则无法通过单次调用SaveChanges
来保存所有数据。您必须对每个原子数据集使用单独的调用。
答案 1 :(得分:0)
一种可能的解决方案是禁用保存验证。但我不推荐它。
db.Configuration.ValidateOnSaveEnabled = false;