最近クライアントからエラー レポートを受け取りましたが、うまく解決できません。何が間違っているのか、誰かが私に洞察を与えてくれることを願っています。
エラーは十分に単純に思えます:
Csla.DataPortalException: DataPortal.Delete が失敗しました (System.InvalidOperationException: シーケンスには System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 ソース) に複数の要素が含まれています)
これは、FileId (PK) をパラメーターとして受け取る DataPortal_Delete メソッドです。
private void DataPortal_Delete(SingleCriteria<File, Guid> criteria)
{
using (var ctx = ContextManager<Ronin.Data.RoninDataContext>
.GetManager(Database.ApplicationConnection, false))
{
var data = ctx.DataContext.Files
.Single(row => row.FileId == criteria.Value);
ctx.DataContext.FileSources.DeleteAllOnSubmit(data.FileSources);
ctx.DataContext.Files.DeleteOnSubmit(data);
ctx.DataContext.SubmitChanges();
}
}
最初にチェックしたのは、同じ FileId を持つ別のレコードがあるかどうかを確認することでした (ただし、主キーであるため、これは不可能なはずです)。実際、すべての FileId は一意でした。クライアント データベースに接続するアプリケーションを起動し、レコードを削除しようとしましたが、問題なく動作しました。クライアント サイトの IT 担当者は、「Problem Step Recorder」を使用して、ユーザーが実行したアクションの段階的なスクリーンショットを送ってくれました。異常はなく、別のマシンを使用したところ、エラーなしでレコードを削除できました。どうやらこれは、アプリケーションが Windows 7 で実行されている場合にのみ発生します。
とはいえ、何がこれを引き起こしているのかについてのアイデアはありますか?