Недавно я получил сообщение об ошибке от клиента, и мне не удалась его решить. Я надеюсь, кто-то может дать мне некоторое представление о том, что может быть неправильным.Ошибка удаления записи с использованием Linq2SQL
ошибка кажется достаточно простой:
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 (хотя и является прима ry key, это должно быть невозможно). Все FileIds были действительно уникальными. Я запустил приложение, подключающееся к базе данных клиента, и попытался удалить запись, и он работал без каких-либо проблем. ИТ-парень на клиентском сайте использовал «Проблемный регистратор шагов», чтобы отправить мне пошаговые скриншоты действий, предпринятых пользователем. Ничего необычного, и когда он использовал другую машину, он смог удалить запись без каких-либо ошибок. По-видимому, это происходит только тогда, когда приложение запускается в Windows 7.
Это говорит о любых идеях относительно того, что может быть причиной этого?
Файлы.FileId является основным ключом в этой таблице? –
Вы уверены, что ошибка генерируется этим фрагментом кода? Ошибка ссылается на SingleOrDefault, но функция использует Single. – gfrizzle
Являются ли FileSources Null? если это разные объекты, вам не нужно использовать include для их получения, прежде чем вы сможете их удалить? – awright18