我一直在尝试通过调用存储过程并尝试从存储过程中获取新创建的 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/