Недавно я получил сообщение об ошибке от клиента, и мне не удалось его устранить. Я надеюсь, что кто-то может дать мне некоторое представление о том, что может быть не так.
Ошибка кажется достаточно простой:
Csla.DataPortalException: DataPortal.Delete ошибка (System.InvalidOperationException: последовательность содержит более одного элемента в System.Linq.Enumerable.SingleOrDefault [TSource] (источник IEnumerable`1)
Вот мой метод DataPortal_Delete, который принимает FileId (PK) в качестве параметра.
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 (хотя это и является первичным ключом, это должно быть невозможно). Все идентификаторы файлов были фактически уникальными. Я запустил приложение, соединяющееся с клиентской базой данных, и попытался удалить запись, и она работала без проблем. ИТ-специалист на клиентском сайте использовал «Регистратор проблемных шагов», чтобы посылать мне пошаговые скриншоты действий, предпринятых пользователем. Ничего необычного, и когда он использовал другую машину, он смог удалить запись без ошибок. По-видимому, это происходит только при запуске приложения в Windows 7.
Тем не менее, есть идеи относительно того, что может быть причиной этого?