gpt4 book ai didi

c# - 如何使用 Entity Framework 执行存储过程并从存储过程中获取输出

转载 作者:太空宇宙 更新时间:2023-11-03 15:36:25 26 4
gpt4 key购买 nike

我一直在尝试通过调用存储过程并尝试从存储过程中获取新创建的 ID 的输出来使用 EF6 插入记录,但一直遇到问题。

我有一个输出为 ContactID 的存储过程

CREATE PROCEDURE [dbo].[usp_InsertContact]
@ContactID int output,
@Name nvarchar(50)
AS
insert into [Contact]
(Name) values (@Name)
set @ContactID = @@IDENTITY

我正在调用存储过程并像这样传递值...

return Convert.ToInt32(AWJE.Database.SqlQuery<int>
("usp_InsertContact @Name", contact.Name));

那也不管用,我收到以下错误...(我之前发布了这个问题并自己回答了,但没有用)。

System.Data.Entity.Infrastructure.DbRawSqlQuery`1[System.Int32]' to type 'System.IConvertible Error

然后我去尝试了这个...

return AWJE.Database.ExecuteSqlCommand
("exec usp_InsertContact @Name", contact.Name);

当它被调用时,我得到以下错误...

Additional information: Must declare the scalar variable "@Name".

如您所见,变量@Name 位于存储过程中,我正在传递变量@Name。

然后我尝试了这个

return AWJE.Database.ExecuteSqlCommand
("exec usp_InsertContact @ContactID OUTPUT, @Name", contact.Name);

这就给出了这个错误...

Additional information: Must declare the scalar variable "@ContactID".

所以我有点不知道如何做到这一点,我知道如何严格使用 ADO.NET 来做到这一点。我四处寻找答案,但不理解我看到的示例,因为我看到的示例与 SqlParameter.Add 等混合在一起......

最佳答案

而不是让你一步一步地深入描述如何去做。

这里基本上有两种直接使用 EF 执行此操作的方法,另一种仅使用纯 SQL。

在 EF 中,您必须将存储过程添加为函数,此处有一篇介绍如何操作的文章 https://msdn.microsoft.com/en-us/data/gg699321.aspx

或者像这样的纯sql方式,

SqlParameter p1= new SqlParameter("@p1", "Test");
SqlParameter p2 = new SqlParameter("@p2", "Test2");

//Executing the stored procedure from your database context
context.Database.ExecuteSqlCommand("sp_StoredProc @p1, @p2", p1, p2);

关于c# - 如何使用 Entity Framework 执行存储过程并从存储过程中获取输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31765131/

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