質問: 私には状況があります。 1. SQL Server 2014テーブルT1を持つデータベース。 2. テーブルT1にデータを保持するEF6を持つWPFアプリケーション。 アプリケーションは正常に実行されています。 アプリケーションが起動すると、テーブルT1が空(0レコード)であれば、SqlBulkCopyを使用してT1に5000レコードを挿入し、トリガーを起動して制約チェックを行うと、結果は次のようになります。 1. テーブルT1は5000レコードで正常に埋められます。 2. すべてのトリガーが発砲され、制約がチェックされ、そのうちのどれもが違反されていません。 3. 問題は、SqlBulkCopy.WriteToServerが完了した後で、一旦列挙しようとするとcontext.T1がクラッシュし、StackOverfolow例外がスローされます。 私はコンテキストを初期化しようとしましたが、成功しませんでした。 手順は2つの場合に成功します: 1. アプリが閉じて再実行されると、コンテキストはT1を正常に読み込みます。 2. T1に少なくとも1つのレコードがあるすべての手順が適用された場合(アプリケーションは空のT1テーブルで起動されます)。 何がStackOverflow例外を引き起こす可能性があります。
回答: 問題は解決しました。誰かが同様のエラーに遭遇した場合に備えて、私は解決策を共有します。 私はTDMテンプレートを変更して、EDMがデータベースからエンティティを生成できるようにしました: 1. INotifyPropertyChangedを実装します。 2. INotifyDataErrorInfoを実装し、DataAnnotationsを使用してData Validationを適用するには、Metadata Separateクラスの検証ルールをチェックします。 そのため、StackOverFlowの例外が発生しました。 プロパティの検証を無効にすると、問題が解決しました。 したがって、WriteToServerが進行中の間、データ検証はSqlBulkCopyとして歓迎されません。