2011-07-12 70 views
0

請參閱example1。如果某些數據輸入錯誤,EF4將無法存活,也無法記錄。如何忽略SaveChange 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; 
} 

例2替代:

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

} 

回答

3

語境行爲類似於工作單元。這意味着當您修改數據並通過對SaveChanges的單一調用存儲數據時,您告訴EF您想要進行原子操作 - 所有更改都成功保存或者所有更改都回滾。 EF在內部使用交易來支持此行爲。如果您不想要這種行爲,則不能通過單一呼叫將所有數據保存到SaveChanges。您必須對每個原子數據集使用單獨的調用。

+0

應該能夠做到這一點 – Mediator

+1

你能做到這一點通過使用多個調用SaveChanges。我不知道更好的解決方案。 –

+0

如何爲每個原子數據集使用單獨的調用? – SamekaTV

0

一個可能的解決方案是禁用驗證保存。但我不推薦它。

db.Configuration.ValidateOnSaveEnabled = false;