¿Cómo puedo obtener la columna de identidad valor asociado a una SubSonic 3 LinqTemplate Insertar?

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

  •  21-09-2019
  •  | 
  •  

Pregunta

Estoy utilizando SubSonic 3.0.0.3 junto con las plantillas T4 LINQ. Mi ProjectRepository, por ejemplo, tiene los dos métodos siguientes:

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;
}

Además de la realización de la pieza de inserción (que funciona muy bien), me gusta mucho para obtener el valor de la columna projectId el incremento automático. Para el registro, esta columna es a la vez la clave principal y la columna de identidad. ¿Existe tal vez una manera de añadir "SELECT SCOPE_IDENTITY ();" a la consulta o tal vez hay un enfoque completamente diferente, que yo debería tratar?

¿Fue útil?

Solución

Se puede hacer esto con las plantillas de ActiveRecord que no todo el cableado de arriba para usted (y también tiene una función de prueba). En su escenario, el método Add tendría una línea: Project.Add () y que volvería el nuevo id

.

Para sus necesidades, puede intentar lo siguiente:

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

Eso debería funcionar ..

* Editar - puede crear una ExtensionMethod para esto en ISqlQuery también, para ahorrar algo de escritura ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top