如何忽略SaveChange EF4中的错误

时间:2011-07-12 19:51:01

标签: c# entity-framework entity-framework-4 savechanges

请参见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)
{

}

2 个答案:

答案 0 :(得分:3)

上下文就像工作单元一样。这意味着当您修改数据并通过对SaveChanges的单次调用存储它们时,您告诉EF您希望进行原子操作 - 要么所有更改都已成功保存,要么所有更改都会回滚。 EF在内部使用事务来支持此行为。如果您不想要此行为,则无法通过单次调用SaveChanges来保存所有数据。您必须对每个原子数据集使用单独的调用。

答案 1 :(得分:0)

一种可能的解决方案是禁用保存验证。但我不推荐它。

db.Configuration.ValidateOnSaveEnabled = false;