Linq中使用InsertOnSubmit()多条插入的问题[是否是微软bug?]
问题描述:
1、数据库“td”中有表“Products”(pid nchar(10) 主键),且已存在两条记录,如下:
[pid] [pname]
12354 omiga e32
12356 omiga e32
2、使用Linq插入新纪录,代码如下:
- C# code
class Program { static void Main(string[] args) { ProductDataContext productDC = new ProductDataContext(); Table<Products> productTable = productDC.GetTable<Products>(); try { productTable.InsertOnSubmit(new Products() { pid = "12354", pname = "omiga e32" });//数据库存在主键为pid=‘12354’的记录 productDC.SubmitChanges(ConflictMode.ContinueOnConflict); } catch { //第一次异常,可以理解 } try { productTable.InsertOnSubmit(new Products() { pid = "12360", pname = "omiga e32" });//数据库不存在该记录 productTable.InsertOnSubmit(new Products() { pid = "12350", pname = "omiga e32" });//数据库不存在该记录 productDC.SubmitChanges(ConflictMode.ContinueOnConflict); } catch { //这一次的异常,如何解释?(两条记录均未插入数据库中) } } }3、上面代码中,第1条记录,数据库中存在,出现“违反了 PRIMARY KEY 约束 'PK_Products'。不能在对象 'dbo.Products' 中插入重复键。”异常,可解。但接下来,pid='12360'与pid='12350'两条记录均不能插入成功,且报同样的异常信息,不解。
请高人解释下。
难道是微软Linq的bug不成?
[解决办法]
Try:
try
{
ProductDataContext productDC1 = new ProductDataContext();
productDC1.GetTable<Products>().InsertOnSubmit(new Products() { pid = "12360", pname = "omiga e32" });
productDC1.GetTable<Products>().InsertOnSubmit(new Products() { pid = "12350", pname = "omiga e32" });
productDC1.SubmitChanges(ConflictMode.ContinueOnConflict);
}
catch
{
}
[解决办法]
很平常,这就是滥用catch造成的。
[解决办法]