Estoy en un mundo de dolor con este, y agradecería que alguien pudiera ayudar.ChangeConflictException en la actualización de Linq a Sql
Tengo un DataContext adjunto a una sola tabla de prueba en una base de datos. La tabla de prueba es el siguiente:
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]
El uso de LINQ, puedo añadir, recuperar y borrar registros de la tabla de prueba, pero no puedo actualizar una fila - para una actualización, siempre me dan una ChangeConflictException con un vacío Colección ObjectChangeConflict.MemberConflicts. Aquí está el código usado:
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();
Aquí está la salida de registro para una actualización realizada a través del 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
Estoy ejecutando esta consulta en un SQL Server 2000 en clúster (8.0.2039). No puedo, por mi vida, descubrir qué está pasando aquí. Ejecutar una consulta de ACTUALIZACIÓN similar contra el DB parece funcionar bien.
Gracias de antemano por cualquier ayuda.
favor enviar el código que está utilizando para la actualización – eglasius