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造成的。
------解决方案--------------------