Entity Framework(コードファースト)を使用して管理されるSQL Serverバックエンドを持つWebAPIサービスがあります。 Linqクエリを使用してデータベースからデータを取得しました。私のAPIエンドポイントのいくつかはデータを取得するために複数の結合を行っているため、本番環境に配備するといくらか遅延が見られました。 ORMマッピングと直接SQL問合せ(ストアド・プロシージャ)を使用して読んだところ、複雑な問合せではストアド・プロシージャを使用するのが最適であるという結論に達しました。Entity Frameworkのストアドプロシージャの最終結果を返します
私のようなコードを使用してストアドプロシージャから値を返す方法を説明するいくつかの記事に出くわした:しかし、すべての例は、単純なSELECT
クエリを扱うとはい、私はまた、複数のSELECT
クエリ結果を返すに出くわした
context.Database.SqlQuery<T>(...)
あまりにも。しかし、その場合は2 SELECT
のクエリです。
実際のシナリオでは、結合やその他のコードが含まれる可能性があるため、2つ以上の選択クエリを使用できます。そして、クエリの最後には、期待されるデータを返す最後のSELECT
クエリを推測します。下記のシナリオを説明するためのサンプルモックアップのコードは次のとおりです。
// Inside my stored procedure
Declare @XId uniqueidentifier
Declare @YId uniqueidentifier
// Some mockup queries. This can have JOINS and other complex codes in real code.
// Below code is made as simple as possible to explain the scenario
Select @XId=Id From Table1 Where Name = 'Name1'
Select @YId=Id From Table2 Where Code = 'Code1'
// This is the data, I am interested
Select * From Table3 Where [email protected] And [email protected]
最後SELECT
クエリから行がこれを達成する方法私は得ることができますか?
私はいくつかの調査を行い、ストアドプロシージャのサポートが最小限であるため、EFで行うことはできないと仮定しました。それはEFの制限内で行うことが可能ですか、または私はこれのためにADO.NETにフォールバックする必要がありますか?
ご協力いただければ幸いです。
ありがとうございました。
@GertArnold - 私はシナリオを説明するサンプルコードスニペットを追加しました。 – abhilashca
'Select *'を 'Select your column columns list 'に置き換えて、あなたが実際に作業していることを実際に知っているはずです。次に、選択された列に一致するプロパティ 'MyResultType'を作成し、' context.Database.SqlQuery(...) 'を呼び出します。 –
grek40
はい、私はすでに試してみましたが、キャストエラーを投げる 'Table3DTO'ではなく、' Table1DTO'にキャストしています。 – abhilashca