.Net Café

Il blog di Leonardo Alario

Linq to SQL recuperare valori di tipo identity

A volte, può capitare di aver bisogno di recuperare il valore di una proprietà di tipo identity, nella nostra DAL contestualmente all'inserimento della tupla, nulla di più facile.

Riprendendo l'esempio del mio post precedente della gestione utenti, ho la classe Utente nel mio DM che espone la proprietà di tipo int IdUtente :

[Column(Storage="_IdUtente", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
    public int IdUtente
    {
        get
        {
            return this._IdUtente;
        }
        set
        {
            if ((this._IdUtente != value))
            {
                this.OnIdUtenteChanging(value);
                this.SendPropertyChanging();
                this._IdUtente = value;
                this.SendPropertyChanged("IdUtente");
                this.OnIdUtenteChanged();
            }
        }
    }

Nella DAL quando l'utente è "persistito", ne recuperiamo l'identity assegnato :

public int SalvaUtente(BOL.Utente utente)
{

int idUtente;

   try

   {
             GestioneUtentiDataContext Dt = new GestioneUtentiDataContext();

             using (TransactionScope Ts = new TransactionScope())
             {

                  Dt.Utentes.InsertOnSubmit(utente);
                  Dt.SubmitChanges();

                  // recupero il valore autogenerato dall'identity nel database

                  idUtente = utente.IdUtente;

             }
             Ts.Complete();

             return idUtente;

    }
    catch
    {
        throw;
     }

}

Questo meccanismo funziona anche in scenari più complessi, inoltre IMHO, é sempre meglio racchiudere il tutto in un gestore di transazioni per assicurare l'atomicità dell'operazione. Se qualcosa dovesse andare storto in operazioni correlate nella stessa transazione, il valore identity sarà "bruciato".

Published Saturday, August 02, 2008 2:42 AM by leo.alario
Filed under: ,