2009-08-03 15 views
1

これは私の問題です。 Linq To SqlでカスタムSQL式を使用して最後に挿入したIDを取得したいとします。最後の挿入されたIDをLinq SQLカスタムSQL式に取得する方法?

私の挿入方法:

public int Add(string Label) 
{ 
    _dbContext.ExecuteCommand("INSERT INTO Products (Label) VALUES (@Label);", Label); 

    _dbContext.SubmitChanges(); 

    var lastId = _dbContext.ExecuteQuery<int>("SELECT Scope_Identity() as [Scope_Identity];").ToList()[0]; 

    return lastId; 
} 

は常にnullを返しますlastId。私はこのクエリ(Insert + Select)をSql Serverで直接試してみましたが、完全に動作し、最後に挿入されたIDを返します。 プロシージャを使用したくなく、新しいProductオブジェクトを使用できません(InsertOnSubmitなどを使用することはできません)。

私を助けてもらえますか?おかげさまで

答えて

1

[OK]を、私はそれを行う方法を発見しました:

public int Add(string Label) 
{ 
    var query = String.Format("INSERT INTO Products (Label) VALUES (@Label); SELECT ProductId FROM Products WHERE ProductId = Scope_Identity();", Label); 

    var lastId = _dbContext.ExecuteQuery<int>(query).ToList()[0]; 

    return lastId; 
} 
0

使用してみてください:

INSERT INTO Products (Label) OUTPUT inserted.ProductID VALUES (@Label); 

ロブ

+0

お返事ありがとうございます。しかし、それは動作しません。変数の出力を取得できません。 – Flesym

0

私はあなたが既に答えてきたことを知っているが、のanouther方法があります私が見つけたことは、テーブルに追加された最新のレコードを編集する必要がある私の特定のシーンに役立ちました。

public int Add(string Label) 
{ 
    var query = String.Format("INSERT INTO Products (Label) VALUES (@Label);", Label); 
    _dbContext.ExecuteCommand(query); 
    var lastId = _dbContext.ExecuteQuery<int>("SELECT IDENT_CURRENT('Products ')").First(); 


    return lastId; 
} 
関連する問題