テーブル値パラメータ、つまり単一の整数Id列を含むIdTableオブジェクトのリストを取得するストアドプロシージャがデータベースにあります。TVPパラメータを使用したExecuteStoreQuery
私はデータベースのエンティティモデルを持っているし、次の操作を実行したい...
ProjectEntities projectEntities = new ProjectEntities();
DataTable stationIds = new DataTable();
stationIds.Columns.Add("Id");
stationIds.Rows.Add(1);
stationIds.Rows.Add(2);
SqlParameter parameter = new SqlParameter("@stationIds",stationIds);
parameter.TypeName = "IdTable";
var parameters = new object[] {parameter};
var results = projectEntities .ExecuteStoreQuery<ProjectSummary>("exec ProjectSummary", parameters);
var count = results.Count();
これはProjectSummaryエンティティの束を返す必要があるときに、何の結果を実行していないし、返します。
私はSQLプロファイラでこれをプロファイルするとき、私は
ALTER PROCEDURE [dbo].[ProjectSummary]
@stationIds [dbo].[IdTable] READONLY
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SELECT * FROM @stationIds
...
するストアドプロシージャを宣言した場合、私は
declare @p3 IdTable
insert into @p3 values(N'1')
insert into @p3 values(N'2')
exec sp_executesql N'exec ProjectSummary',N'@stationIds [IdTable] READONLY',@[email protected]
次その後、私は戻って結果をしませゲット、それはTVPのように見えますパラメータが空になっています。
どこが手動で私は値1と2は、SELECTクエリから返さ取得
declare @p3 IdTable
insert into @p3 values(N'1')
insert into @p3 values(N'2')
EXEC [ProjectSummary]
@stationIds = @p3
GO
を実行しているかのよう。
したがって、ExecuteStoreCommandを実行するときにSP_EXECUTESQLではなくEXECを使用するように見えます。上記のコード例では、どのように私はそれをやっていますか?
ユーザ定義テーブルタイプIdTypeをEFにどのように追加しましたか?私はそれができないと思った。 – Anand