Gần đây tôi đã nhận được báo cáo lỗi từ khách hàng và không có may mắn giải quyết nó. Tôi hy vọng ai đó có thể cho tôi cái nhìn sâu sắc về những gì có thể sai.Lỗi khi xóa bản ghi bằng cách sử dụng Linq2SQL
Lỗi này có vẻ đơn giản đủ:
Csla.DataPortalException: DataPortal.Delete thất bại (System.InvalidOperationException: Chuỗi chứa nhiều hơn một phần tử ở System.Linq.Enumerable.SingleOrDefault [TSource] (nguồn IEnumerable`1)
đây là phương pháp DataPortal_Delete của tôi, trong đó có các fileId (PK) như một tham số.
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();
}
}
điều đầu tiên tôi kiểm tra là để xem nếu có một kỷ lục với fileId cùng (mặc dù là prima ry key, điều này sẽ là không thể). Tất cả FileIds thực ra là duy nhất. Tôi đã khởi chạy ứng dụng kết nối với cơ sở dữ liệu máy khách và cố gắng xóa bản ghi và nó đã hoạt động mà không có bất kỳ vấn đề nào. Các anh chàng CNTT tại trang web của khách hàng sử dụng "Problem Step Recorder" để gửi cho tôi từng bước ảnh chụp màn hình của các hành động được thực hiện bởi người dùng. Không có gì ngoài bình thường, và khi anh ta sử dụng một cỗ máy khác, anh ta có thể xóa bản ghi mà không có bất kỳ lỗi nào. Rõ ràng điều này chỉ xảy ra khi ứng dụng được chạy trong Windows 7.
Điều đó nói rằng, bất kỳ ý tưởng nào về điều gì có thể gây ra điều này?
Files.FileId là khóa chính trên bảng đó? –
Bạn có chắc chắn rằng lỗi được tạo bởi đoạn mã này không? Lỗi này đang tham chiếu SingleOrDefault, nhưng chức năng đang sử dụng Single. – gfrizzle
Nộp tài liệu có phải là Null không? nếu đây là những đối tượng khác nhau, bạn không phải sử dụng một bao gồm để có được chúng trước khi bạn có thể xóa chúng? – awright18