gpt4 book ai didi

entity-framework-4 - 带有 TVP 参数的 ExecuteStoreQuery

转载 作者:行者123 更新时间:2023-12-04 17:40:10 27 4
gpt4 key购买 nike

我的数据库中有一个存储过程,它采用表值参数,即包含单个整数 Id 列的 IdTable 对象列表。

我有一个用于数据库的实体模型,并希望执行以下操作...

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 Profiler 中对此进行分析时,我得到以下信息
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',@stationIds=@p3

如果我将存储过程声明为
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
...

然后我没有得到结果,看起来 TVP 参数是空的。

好像我手动执行
declare @p3 IdTable
insert into @p3 values(N'1')
insert into @p3 values(N'2')

EXEC [ProjectSummary]
@stationIds = @p3

GO

我得到了从 SELECT 查询返回的值 1 和 2。

因此,当我运行 ExecuteStoreCommand 时,看起来我想使用 EXEC 而不是 SP_EXECUTESQL。鉴于上面的代码示例,我到底该怎么做?

最佳答案

结果是 ExecuteStoreQuery 调用不正确,应该是

SqlParameter stations = new SqlParameter { ParameterName = "p0", Value = ids, TypeName = "[dbo].[IdTable]", SqlDbType = SqlDbType.Structured };

var parameters = new object[] { stations };

var results = projectEntities.ExecuteStoreQuery<ProjectSummary>("exec ProjectSummary @p0", parameters);

所以我需要命名参数并将@p0 添加到 exec 命令。

关于entity-framework-4 - 带有 TVP 参数的 ExecuteStoreQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5979706/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com