2009-03-18 23 views
7

Qual è il modo migliore per verificare i problemi di concorrenza quando si utilizza LINQ to SQL in un'applicazione ASP.net.Concorrenza con Linq To Sql e ASP.NET

Nella mia applicazione, sto recuperando un record dal database e visualizzando i campi in caselle di testo modificabili. Quindi il datacontext viene gettato via.

Come si salva l'oggetto entità in modo che sia possibile utilizzare le funzioni di concomitanza integrate di L2Sql? Non posso salvare l'oggetto in sessione e ricollegarlo a un nuovo datacontext: l2s si lamenta che l'oggetto non è nuovo.

LinqDataSource riesce a farlo in qualche modo. Qualcuno sa come?

risposta

2

Il modo in cui la concorrenza ottimistica in Linq2Sql funziona è che esso memorizza i valori originali e li confronta su inserto.

Se si allontana il datacontext si perdono i valori originali.

Quello che faccio di solito è caricare l'oggetto dal database ancora una volta quando sto per salvare, quindi modificare quell'oggetto con i valori del modulo.

+2

Sì, ma se lo faccio (quale ero prima) verranno caricate le modifiche di altri utenti e Linq a SQL non genererà un errore di concorrenza. –

+0

hai provato a guardare il metodo Table . Attach (TEntity entity, TEntity original)? – AndreasN

+0

In che cosa differisce dall'ottenere l'oggetto dal database e apportare le modifiche e fare SubmitChanges()? –

0

Per impostazione predefinita, Linq To SQL supporta optimistic concurrency control.

È possibile modificare la proprietà UpdateCheck di ogni campo della tabella:

In the LINQ to SQL object model, an optimistic concurrency conflict occurs when both of the following conditions are true:

  • The client tries to submit changes to the database.
  • One or more update-check values have been updated in the database since the client last read them.
+0

Il loro problema è che perdono DataContext sul postback e non è possibile allegare un nuovo DC all'oggetto originale. – Lucas