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

标签 c# sql-server entity-framework stored-procedures

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

相关文章:

C# 在不加载未经验证的 XSD 的情况下使用 XSD 验证 XML?

c# - 返回字符串在自定义对象列表中作为属性出现的次数

entity-framework - 如何在 Entity Framework 中自定义 DbContext 属性名称并防止被覆盖?

entity-framework - 在创建POCO时处理 Entity Framework

c# - 使用 session 邀请 C# 在正文中发送 Html

c# - 将异步方法作为 Quartz.NET 作业运行并处理对象问题

sql - 在 SQL Server 中查看与表

c# - 将数百万行插入 SQL Server 数据库的最佳方法

sql-server - 从(SQL)链接服务器 View 缓存表的最佳方法是什么?

c# - 延迟加载在 EntityFramework 6 中不起作用