.NET Core Entity Frameworkストアドプロシージャ

asp.net-core c# entity-framework-core stored-procedures

質問

私はASP.NET 4.5アプリケーションを.NETコアに移植しようとしています。私は理解できないような真の問題が1つあります。

私の既存のアプリケーションは、複数のデータテーブルを持つデータセットを返すストアドプロシージャを実行します。 Entity Frameworkは、返されたフィールドを自動的にエンティティプロパティにマップできますが、データセット内の最初のデータテーブル(自然)でのみ動作します。

だから、モデル構築プロセスを横取りしてカスタムコードを使ってデータセットを処理し、エンティティフィールドを設定するために他のデータセットを調べることができるかどうかを調べようとしています。

私はSqlConnectionを使用してストアドプロシージャを直接実行する通常の方法を使用できますが、Entity Frameworkにこれを実行する方法があるかどうかは疑問です。

受け入れられた回答

現在、データを返すストアドプロシージャを実行する方法は、 DbSet.FromSqlメソッドを使用することです。

using (var context = new SampleContext())
{
    var data= context.MyEntity
        .FromSql("EXEC GetData")
        .ToList();
}

これには一定の制限があります。

  • それはDbSetで呼び出される必要があります
  • 返されるデータは、 DbSet型のすべてのプロパティにマップする必要があります
  • アドホックオブジェクトはサポートされていません。

あるいは、単純なADO.NETに戻ることができます:

using (var context = new SampleContext())
using (var command = context.Database.GetDbConnection().CreateCommand())
{
    command.CommandText = "GetData";
    command.CommandType = CommandType.StoredProcedure;
    context.Database.OpenConnection();
    using (var result = command.ExecuteReader())
    {
        // do something with result
    }
}

いくつかの段階でSQLクエリからアドホック型を返すサポートを導入する計画があります。


人気のある回答

@ DKhanafの複数のデータセットに関する問題に答えるには、SqlDataAdapterを使用してすべての結果セットを含むDataSetオブジェクトを設定します。 SqlDataAdapterは完全な.NET Frameworkを必要とするため、.NET 462などのものをターゲットにしながら.NETCoreプロジェクトを実行する必要があります。

         using (var context = new SampleContext())
            using (var command = context.Database.GetDbConnection().CreateCommand())
            {
                command.CommandText = "GetData";
                command.CommandType = CommandType.StoredProcedure;
                context.Database.OpenConnection();
                using (SqlDataAdapter adapter = new SqlDataAdapter(command))
                {
                    var ds = new DataSet();
                    adapter.Fill(ds);
                    return ds;
                }

            }
        }


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ