Wie kann ich den Identitätsspalt Wert, der mit einem SubSonic 3 LinqTemplate Insert erhalten?

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

  •  21-09-2019
  •  | 
  •  

Frage

Ich bin mit SubSonic 3.0.0.3 zusammen mit den Linq T4-Vorlagen. Mein ProjectRepository zum Beispiel hat die folgenden zwei Methoden:

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

Zusammen mit dem Einsatz durchführen (die großen Werke), ich möchte wirklich den Wert der automatisch inkrementierende Spalte projectID erhalten. Für die Aufzeichnung ist diese Spalte sowohl der Primärschlüssel und Identitätsspalte. Gibt es vielleicht eine Möglichkeit, fügen Sie „SELECT SCOPE_IDENTITY ();“ auf die Abfrage oder vielleicht ein ganz anderer Ansatz gibt es, die ich versuchen soll?

War es hilfreich?

Lösung

Sie können dies tun, mit den Active Vorlagen, die vor allem von der Verkabelung für Sie tut (und auch Test-in gebaut hat). In Ihrem Szenario würde die Add-Methode eine Zeile: Project.Add () und es würde die neue ID zurückkehrt

.

Für Ihre Bedürfnisse, können Sie versuchen, diese:

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

Das sollte funktionieren ..

* Edit - Sie Extension dafür auf ISqlQuery zu schaffen, etwas schriftlich zu retten ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top