Я получил сообщение об ошибке от клиента недавно, и не имею никакой удачи при разрешении его. Я надеюсь, что кто-то может дать мне некоторое понимание тому, что может быть неправильным.
Ошибка кажется достаточно простой:
Csla. DataPortalException: DataPortal. Удалите отказавший (Система. InvalidOperationException: Последовательность содержит больше чем один элемент в System. Linq. Счетный. 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 (будучи первичным ключом, это должно быть невозможно). Все FileIds были на самом деле уникальны. Я запустил приложение, соединяющееся с клиентской базой данных, и попытался удалить запись, и это работало без любых проблем. Парень IT на клиентском сайте использовал "проблемное Устройство записи Шага", чтобы отправить мне шаг за шагом снимки экрана мер, принятых пользователем. Ничто необычное, и когда он использовал другую машину, он смог удалить запись без любых ошибок. По-видимому, это только происходит, когда приложение запущено в Windows 7.
Тем не менее какие-либо идеи относительно того, что могло вызывать это?
$('[name=whatever]').val()
Документация jQuery является вашим другом.
-121--774555-Когда необходимо выполнить сериализацию, обычно выполняется проецирование на другие типы. Это устраняет циклические ссылки, а также другие данные, которые я не хочу сериализовать. Например:
var q = (from c in Repository.Customers()
where c.Id == id
select new
{
Name = c.Name,
Orders = from o in C.Orders
select new
{
Date = o.Date
}
}).First();
return Json(q);
-121--3549693- Предполагая, что вызов Single является источником проблемы, вместо:
ctx.DataContext.Files.Single(...)
измените код, чтобы разрешить возврат нескольких строк из этого запроса, а затем зарегистрируйте то, что он возвращает, когда возвращает более одной строки. Это указывает на проблему с «дублирующимися» данными.
Еще одна вещь, на которую нужно взглянуть, - это SQL, генерируемый за кадром. Не уверен, что это поможет, но это не может навредить. Я не знаю вашу модель данных, поэтому не могу понять ваш код так хорошо, как хотелось бы.
Если это происходит только в Windows 7, то причина может быть в ОС. Пробовали ли вы сделать это в Vista? Среда Vista похожа на Windows 7. Вы также можете использовать Windows Virtual PC + XP Mode. Это приложение виртуализации, специально разработанное для Windows 7, чтобы пользователи могли запускать приложения, как в Windows XP. Примечание: XP Mode требует процессор с поддержкой виртуализации.