sql >> データベース >  >> RDS >> Sqlserver

EntityFrameworkでSQLServerシーケンスの次の値を取得するにはどうすればよいですか?

    次のような次のシーケンス値を選択する単純なストアドプロシージャをSQLServerで作成できます。

    CREATE PROCEDURE dbo.GetNextSequenceValue 
    AS 
    BEGIN
        SELECT NEXT VALUE FOR dbo.TestSequence;
    END
    

    次に、そのストアドプロシージャをEntity FrameworkのEDMXモデルにインポートし、そのストアドプロシージャを呼び出して、次のようにシーケンス値をフェッチできます。

    // get your EF context
    using (YourEfContext ctx = new YourEfContext())
    {
        // call the stored procedure function import   
        var results = ctx.GetNextSequenceValue();
    
        // from the results, get the first/single value
        int? nextSequenceValue = results.Single();
    
        // display the value, or use it whichever way you need it
        Console.WriteLine("Next sequence value is: {0}", nextSequenceValue.Value);
    }
    

    更新: 実際には、ストアドプロシージャをスキップして、EFコンテキストからこの生のSQLクエリを実行するだけです。

    public partial class YourEfContext : DbContext 
    {
        .... (other EF stuff) ......
    
        // get your EF context
        public int GetNextSequenceValue()
        {
            var rawQuery = Database.SqlQuery<int>("SELECT NEXT VALUE FOR dbo.TestSequence;");
            var task = rawQuery.SingleAsync();
            int nextVal = task.Result;
    
            return nextVal;
        }
    }
    


    1. データベースアクセス許可の設定

    2. タイムゾーン情報を使用してMySQLに日時を保存する方法

    3. リンクサーバーエラーのトラップ

    4. Microsoft SQL Server 2005/2008:XMLとtext/varcharデータ型