Come posso ottenere la colonna di identità valore associato a un SubSonic 3 LinqTemplate inserimento?

StackOverflow https://stackoverflow.com/questions/1576451

  •  21-09-2019
  •  | 
  •  

Domanda

Sto usando 3.0.0.3 SubSonic insieme con i modelli T4 Linq. Il mio ProjectRepository, per esempio, ha i seguenti due metodi:

public int Add(Project item)
{
    int result = 0;
    ISqlQuery query = BuildInsertQuery(item);

    if (query != null)
    {
       result = query.Execute();
    }
    return result;
}

private ISqlQuery BuildInsertQuery(Project item)
{
    ITable tbl = FindTableByClassName();

    Insert query = null;
    if (tbl != null)
    {
        Dictionary<string, object> hashed = item.ToDictionary();
        query = new Insert(_db.Provider).Into<Project>(tbl);

        foreach (string key in hashed.Keys)
        {
            IColumn col = tbl.GetColumn(key);
            if (col != null)
            {
                if (!col.AutoIncrement)
                {
                    query.Value(key, hashed[key]);
                }
            }
        }
    }

    return query;
}

Con l'esecuzione l'inserto (che funziona bene), mi piacerebbe davvero per ottenere il valore della colonna a incremento automatico ProjectID. Per la cronaca, questa colonna è sia la chiave primaria e colonna di identità. C'è forse un modo per aggiungere "SELECT SCOPE_IDENTITY ();" alla query o forse c'è un approccio completamente diverso, che dovrei provare?

È stato utile?

Soluzione

Si può fare questo con i modelli ActiveRecord che fa tutto il cablaggio sopra per voi (e ha anche incorporato in fase di test). Nel vostro scenario, il metodo Add avrebbe una riga: Project.Add () e che sarebbe tornato il nuovo id

.

Per le vostre esigenze, si può provare questo:

var cmd=query.GetCommand();
cmd.CommandSql+=";SELECT SCOPE_IDENTITY() as newid";
var newID=query.Provider.ExecuteScalar(cmd);

Che dovrebbe funzionare ..

* Modifica - è possibile creare un ExtensionMethod per questo su ISqlQuery troppo, per risparmiare un po 'di scrittura ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top