どのように私は亜音速の3 LinqTemplate挿入でID列の値関連を取得することはできますか?

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

  •  21-09-2019
  •  | 
  •  

質問

私は、LINQのT4テンプレートと一緒に亜音速の3.0.0.3を使用しています。私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列の値を取得したいのですが。記録のために、この列は主キーとID列の両方です。追加する方法は、おそらくそこにある「SELECT SCOPE_IDENTITYは();」クエリにまたは多分、私が試してみてください全く異なるアプローチがあります?

役に立ちましたか?

解決

あなたはActiveRecordのはあなたのために、上記の配線のすべてを行い、テンプレート(とも内蔵されていテスト)でこれを行うことができます。あなたのシナリオでは、Addメソッドは、1行必要があります: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