首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用重复项批量更新Linq-To-Sql

使用重复项批量更新Linq-To-Sql
EN

Stack Overflow用户
提问于 2013-01-29 08:02:08
回答 1查看 599关注 0票数 2

我正在用C# .NET 3.5中的LINQ-To-SQL更新数据库,但我使用的数据并不总是好的。插入的数据和数据库中很可能存在重复项。

目前,我正在使用这个,其中dataSetOnedataSetTwodataSetThree是要更新的模型的列表:

代码语言:javascript
复制
AppDataContext db = new AppDataContext();

db.DatasetOne.InsertAllOnSubmit(dataSetOne);
db.DatasetTwo.InsertAllOnSubmit(dataSetTwo);
db.DatasetThree.InsertAllOnSubmit(dataSetThree);

try
{
    db.SubmitChanges(ConflictMode.ContinueOnConflict);
}

catch (Exception e)
{
    CsvToImsConverter.Log.Error(e.Message);

    foreach (ObjectChangeConflict occ in db.ChangeConflicts)
    {
        MetaTable metatable = db.Mapping.GetTable(occ.Object.GetType());
        Console.WriteLine("Error in Table: {0}", metatable.TableName);
    }
}

这个可以很好的工作。我遇到的问题是,如果存在任何重复项,程序就不会更新,从而抛出主键冲突。我想插入那些没有主键冲突的值,并更新那些没有冲突的值。

我可以在数据库中搜索重复项,但由于数据库中可能有数千条记录和数百条我正在尝试插入的记录,这可能会非常昂贵。有没有办法捕获主键冲突错误,更新此记录,然后继续?由于不会有太多重复,这将是一个更好的解决方案。使用LINQ-To-SQL不是必须的。

使用foreach循环并使用catch语句插入列表中的每个对象会不会更好?

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-01-30 05:28:09

您担心性能问题,同时使用Linq-2-sql进行批量插入/更新。这是不太一致的,因为linq-2-sql不适合批处理操作(至少如果您需要它们是快速的)。

别被InsertAllOnSumbit骗了.Linq-2-sql将为每个插入创建单独的insert语句。这本身就已经很慢了。

在临时表中批量插入数据集are /Two/Three要好得多。使用SqlBulkCopy),然后使用merge语句移动到目标表。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14573486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档