web-dev-qa-db-ja.com

Entity Framework Core 2.0でのストアドプロシージャの実行

ストアドプロシージャを実行し、単一の値を返すEF Coreの戻り値を読み取るシナリオがあります。

このコードで試しましたが、これは機能しません。 ExecuteSqlCommandはselectでは機能せず、データベースの更新にのみ使用できることを理解しています。

var test =  context.Database.ExecuteSqlCommand("SPName");

ストアドプロシージャには、Select 'somevalue'

ストアドプロシージャが返すデータを取得するための代替手段を探しています。

8
Pradeep H

以下のコードで私の問題を解決することができます。これは、以下の返信に示された提案に基づいています。

using (var command = context.Database.GetDbConnection().CreateCommand())
    {
        command.CommandText = "StoredProcedureName";
        command.CommandType = CommandType.StoredProcedure;

        context.Database.OpenConnection();

        var dataReader = command.ExecuteReader();

        if (dataReader.Read())
        {
            string _test = dataReader.GetString(dataReader.GetOrdinal("ColumnName"));
        }
    }
7
Pradeep H
DbCommand cmd = ctx.Database.GetDbConnection().CreateCommand();
cmd.CommandText = "SPName";
cmd.CommandType = CommandType.StoredProcedure;

    if (cmd.Connection.State != ConnectionState.Open)
    {
        cmd.Connection.Open();
    }

return await cmd.ExecuteNonQueryAsync();

これについての投稿は次のとおりです。 https://nodogmablog.bryanhogan.net/2016/07/entity-framework-core-and-calling-a-stored-proceduce/#comment-60582

14
grabhints

MSのドキュメントをご覧ください: https://docs.Microsoft.com/en-us/ef/core/querying/raw-sql

var blog = context.Blogs
    .FromSql("EXECUTE dbo.GetMostPopularBlogs")
    .SingleOrDefault();

これらのサンプルにはgitリポジトリがあります。 https://github.com/aspnet/EntityFramework.Docs/blob/master/samples/core/Querying/Querying/RawSQL/Sample.cs

EF Coreのストアドプロシージャを利用するには、次のビデオをご覧ください。 https://www.youtube.com/watch?v=bX3BPSbvofE

2
nologo
Please follow below steps :

Step1: Create model class 

  public class SP_GetService
  {
        [Key]
        public int ServiceId { get; set; }
        public string ServiceAcronym { get; set; }
        public string ServiceDescription { get; set; }
    }

Step2: Create dbset in context file

public virtual DbSet<SP_GetService> SP_GetServices { get; set; }

Step3 : execute procedure 


using (var _context = new SampleContext())
{
 var data = _context.SP_GetServices.FromSql("EXECUTE GetService @Param={0}", "value").ToList();
}
0
Ritesh Kumar