在SqlBulkCopy输入大数据后,EF6数据上下文抛出stackoverflow异常

时间:2016-05-25 12:33:07

标签: wpf entity-framework-6 sqlbulkcopy

我有一个情况,请考虑:

  1. 带有表T1的SQL Server 2014数据库。
  2. 具有EF6的WPF应用程序,用于维护表T1中的数据。
  3. 应用程序运行正常。

    当应用程序启动时,如果表T1为空(0条记录),则使用SqlBulkCopy在T1中插入5000条记录,允许触发触发和约束检查,结果为:

    1. 表T1成功填写了5000条记录。
    2. 触发了所有触发器并检查了约束,并且没有违反它们。
    3. 问题是,在SqlBulkCopy.WriteToServer完成后,一旦尝试枚举,context.T1就会崩溃,抛出StackOverfolow异常。
    4. 我试图初始化上下文但没有成功。

      该程序将在两种情况下成功:

      1. 如果应用已关闭并重新运行,则上下文将成功读取T1。
      2. 如果应用了所有步骤,其中T1至少有一条记录(应用程序以非空T1表启动)。
      3. 什么可能导致StackOverflow异常。

1 个答案:

答案 0 :(得分:0)

好的,问题解决了,万一其他人会遇到类似的错误,我会分享我的解决方案。

我修改了T4模板,使EDM能够从我的数据库生成实体:

  1. 实施INotifyPropertyChanged。

  2. 通过检查元数据单独类中的验证规则,实施INotifyDataErrorInfo并使用DataAnnotations来应用数据验证。

  3. 导致StackOverFlow异常。

    禁用属性验证解决了这个问题。

    因此,当WriteToServer正在进行时,数据验证不受欢迎,因为SqlBulkCopy。