Infatti io avevo detto "qualcosa di simile"
Quello che vuoi tu mi sembra difficile che possa essere gestito da EF.
A parte questo con EF puoi fare questo (che potrebbe anche essere sufficiente):
- Carichi la view sul client 1
- Client 2 Modifica dei dati che in quel momento client 1 sta guardando
- Non succede nulla tranne per il fatto che client 1 continua a guardare dati vecchi.
- Ad un certo punto Client 1 (che ha ancora i vecchi dati in grid) fa una modifica e prova a salvare.
- EF lancia una ConcurrencyException()
- Tu catturi l'eccezione e puoi:
1) Aggiornare il context con i dati aggiornati dal DB con Refresh impostato su SourceWin
2) sempre con refresh() ma questa volta impostato su ClientWin aggiorni il context
- In entrambi i casi ora il context è aggiornato e puoi richiamare saveChanges.
La differenza tra i due tipi di refresh sta nel fatto che nel primo caso vince il client che aggiorna per primo (e il secondo si becca magari una messagebox di errore), nel secondo caso vince quello che aggiorna per ultimo. Esistono svariati casi in cui uno di questi due comportamenti ha senso e l'altro no. E viceversa.