我使用亚音速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;
}

随着执行插入(伟大的工程),我真的很想得到自动递增专案编号列的值。根据记录,该列既是主键和标识列。有可能的方式来追加“SELECT SCOPE_IDENTITY();”到查询或可能有完全不同的方法,我应该尝试一下呢?

有帮助吗?

解决方案

您可以用它做上文对于您(也有内置的测试)配线的ActiveRecord的模板做到这一点。在你的情况下,Add方法将有一行:Project.Add(),它会返回新的ID

有关你的需求,你可以试试这个:

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

这应该工作..

*编辑 - 你可以为这对ISqlQuery创建ExtensionMethod太多,为了节省一些写作...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top