Как я могу получить значение столбца идентификаторов, связанное со вставкой SubSonic 3 LinqTemplate?

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

  •  21-09-2019
  •  | 
  •  

Вопрос

Я использую SubSonic 3.0.0.3 вместе с шаблонами Linq T4.Например, мой ProjectRepository имеет следующие два метода:

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

Помимо выполнения вставки (которая отлично работает), мне бы очень хотелось получить значение автоматически увеличивающегося столбца ProjectId.Для записи этот столбец является одновременно столбцом первичного ключа и идентификатора.Возможно, есть способ добавить «SELECT SCOPE_IDENITY ();» к запросу или, может быть, есть совершенно другой подход, который я должен попробовать?

Это было полезно?

Решение

Вы можете сделать это с помощью шаблонов ActiveRecord, которые выполняют всю описанную выше проводку за вас (а также имеют встроенное тестирование).В вашем сценарии метод Add будет иметь одну строку:Project.Add(), и он вернет новый идентификатор.

Для ваших нужд вы можете попробовать следующее:

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

Это должно сработать..

* Изменить - вы также можете создать для этого ExtensionMethod в ISqlQuery, чтобы сэкономить на написании...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top