读书人

Linq中使用InsertOnSubmit()多条插入的

发布时间: 2012-02-07 17:45:37 作者: rapoo

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造成的。
[解决办法]
探讨

引用:

你的重复记录已经在 productTable 里了,除非你Detach 移除它。


按照#1楼的提示,我解决了问题。对于你的Detach方案,我并没有很好的理解。如何去检测这个productTable表,在新插入的记录有重复的现象呢?请指点

读书人网 >.NET

热点推荐