Ciao a tutti,
ho un problema con la concorrenza ottimistica in c# visual studio 2010 framework 4.0: ossia ho creato un file .edmx per l'entity framework in cui ho mappato ,con l' "update model from database", una tabella 8di nome prova) con i seguenti campi : PriKey,cognome e vercol;
il campo vercol è un timestamp che ho impostato con 'Concurrency mode ' a 'fixed' , così come per il campo 'Cognome'
Utilizzando questo codice però non riesco a scatenare l'errore
di concorrenza (OptimisticConcurrencyException) :
TestConcorrenzaEntities ctx1 = new TestConcorrenzaEntities();
TestConcorrenzaEntities ctx2 = new TestConcorrenzaEntities();
try
{
prova p1 = ctx1.prova.Where(cust => cust.PriKey == 1).First();
prova p2 = ctx2.prova.Where(cust => cust.PriKey == 1).First();
//blocco p1
p1.cognome = "bb";
p1.VerCol = p1.VerCol;
ctx1.SaveChanges();
//blocco p2
p2.cognome = "aa";
p2.VerCol = p2.VerCol;
ctx2.SaveChanges();
}
catch (OptimisticConcurrencyException ex)
{
}
----------------------------------
Ecco la Stored procedure per update su db:
USE [TestConcorrenza]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[updateProva]
(@PriKey int,@cognome varchar(50),@VerCol timestamp)
AS
BEGIN
SET NOCOUNT ON;
update prova
set
Cognome = @cognome
where
(PriKey=PriKey)
and
([VerCol]=@VerCol)
IF @@ROWCOUNT > 0
BEGIN
SELECT [VerCol] FROM prova
WHERE [VerCol]=@VerCol;
END
END
Eppure ho impostato tutto per la concorrenza per l'EF,o almeno credo, però il risultato è che nel
db (Sql server 2008 express dove c'è una stored procedure per l'update) il valore "bb" di cognome del blocco p1 viene updatato mentre quando arriva
a p2 non scrive il valore "aa" ma non và in errore.
Ho visto in giro ma pare che ad altri funzioni.Forse mi manca qualche info?
Secondo voi a cosa può essere dovuto il fatto che non scatti l'eccezione per concorrenza, ma si limiti a non scrivere il blocco p2?
Ciao