4

我正在开发一个应用程序,其中一次将大量数据插入 SQL 数据库。我使用 LINQ to SQL,并有这样的东西作为我的插入操作:

foreach (var obj in objects) { context.InsertOnSubmit(obj); } context.SubmitChanges();

这就是问题所在:如果我遇到异常(例如 DuplicateKeyException),我不知道是什么对象导致了问题。我得到的唯一信息是至少有一个对象包含与数据库中其他键相同的键值。

是否可以提取有关哪些对象导致冲突的更多信息?

当然,我可以在每次 InsertOnSubmit 之后调用 SubmitChanges,但是由于我要插入的数据量,这非常慢。

有人对我有什么建议吗?谢谢!

4

2 回答 2

1

朋友,我不是想成为一个聪明的 alec,也许我还是成功了,但我的主要建议是你放弃 linq 用于数据加载。SSIS 为 ETL 工作生成简单、高效且易于维护的代码。原因是,它旨在做到这一点。

其次,您没有指定抛出什么类型的异常,也没有指定该异常在呈现给您时是否包含非 null 内部异常。那是我要看的第一个地方。

祝你好运。

于 2010-06-26T22:25:02.110 回答
0

我正在使用 Linq to sql 进行批量插入。它很慢,不是为此而设计的,但它非常适合我的场景。

我正在使用 ctx.Log 来跟踪错误。http://damieng.com/blog/2008/07/30/linq-to-sql-log-to-debug-window-file-memory-or-multiple-writers上有很好的例子

另外,我正在使用 ctx.Log 来获取进度条,您可能会发现这很有用。更多详细信息可在我的博客文章 http://epandzo.wordpress.com/2011/01/02/linq-to-sql-ctx-submitchanges-progress/

和 stackoverflow 问题 LINQ to SQL SubmitChangess() 进度

于 2011-01-02T17:12:38.053 回答