Tôi đang ở trong một thế giới đau khổ với cái này, và tôi rất cảm kích nếu ai đó có thể giúp đỡ.ChangeConflictException trong LINQ to Sql update
Tôi có một DataContext được đính kèm vào một bảng thử nghiệm trên cơ sở dữ liệu. Bảng kiểm tra như sau:
CREATE TABLE [dbo].[LinqTests](
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[StringValue] [varchar](255) NOT NULL,
[DateTimeValue] [datetime] NOT NULL,
[BooleanValue] [bit] NOT NULL,
CONSTRAINT [PK_LinqTests] PRIMARY KEY CLUSTERED ([ID] ASC))
ON [PRIMARY]
Sử dụng LINQ, tôi có thể thêm, lấy và xóa các hàng từ bảng kiểm tra, nhưng tôi không thể cập nhật liên tục - cho một UPDATE, tôi luôn luôn có được một ChangeConflictException với một sản phẩm nào Bộ sưu tập ObjectChangeConflict.MemberConflicts. Đây là mã được sử dụng:
var dataContext = new UniversityDataContext();
dataContext.Log = Console.Out;
for (int i = 1; i <= 1; i++) {
var linqTest = dataContext.LinqTests.Where(l => (l.ID == i)).FirstOrDefault();
if (null != linqTest) {
linqTest.StringValue += " I've been updated.";
}
else {
linqTest = new LinqTest {
BooleanValue = false,
DateTimeValue = DateTime.UtcNow,
StringValue = "I am in loop " + i + "."
};
dataContext.LinqTests.InsertOnSubmit(linqTest);
}
}
try {
dataContext.SubmitChanges(ConflictMode.ContinueOnConflict);
}
catch (ChangeConflictException exception) {
Console.WriteLine("Optimistic concurrency error.");
Console.WriteLine(exception.Message);
Console.ReadLine();
}
Console.ReadLine();
Đây là đầu ra nhật ký cho bản cập nhật được thực hiện thông qua DataContext.
UPDATE [dbo].[LinqTests]
SET [StringValue] = @p3
WHERE ([ID] = @p0) AND ([StringValue] = @p1) AND ([DateTimeValue] = @p2) AND (NOT ([BooleanValue] = 1))
-- @p0: Input BigInt (Size = 0; Prec = 0; Scale = 0) [1]
-- @p1: Input VarChar (Size = 15; Prec = 0; Scale = 0) [I am in loop 1.]
-- @p2: Input DateTime (Size = 0; Prec = 0; Scale = 0) [3/19/2009 7:54:26 PM]
-- @p3: Input VarChar (Size = 34; Prec = 0; Scale = 0) [I am in loop 1. I've been updated.]
-- Context: SqlProvider(Sql2000) Model: AttributedMetaModel Build: 3.5.30729.1
Tôi đang chạy truy vấn này trên một cụm máy chủ SQL 2000 (8.0.2039). Tôi không thể, cho cuộc sống của tôi, tìm ra những gì đang xảy ra ở đây. Chạy một truy vấn UPDATE tương tự với DB dường như hoạt động tốt.
Cảm ơn trước vì đã được trợ giúp.
xin vui lòng gửi mã bạn đang sử dụng cho các bản cập nhật – eglasius