[英]EF 4.1 Code First: Execute Stored Proc and return IDENT
我正在尝试使用context.Database
来执行插入记录并返回标识的存储过程。 我知道我的 proc 可以工作,使用 output 参数、select 或返回,但我无法让ExecuteSqlCommand
或SqlQuery<int>
返回身份。
使用带返回的存储过程,
INSERT INTO TableA (FieldA, FieldB)
RETURN SCOPE_IDENTITY
我看到 SSMS 的返回值为1010966
DECLARE @return_value int
EXEC @return_value = spInsertRecord
SELECT 'Return Value' = @return_value
但是我在我的应用程序中所做的任何事情都没有返回有效值。
Int64 result = context.Database.ExecuteSqlCommand
总是返回 3,并且在使用SqlQuery<int>
时出现引用 Decimal 的转换错误。 我尝试使用 output 参数,但无法使代码正确执行,因此专注于使用SELECT SCOPE_IDENTITY
或RETURN SCOPE_IDENTITY
的应用程序
由于没有创建模型来替换存储过程中包含的逻辑,我对返回存储过程和应用程序级别的值的任何和所有建议持开放态度。
以下是如何让它发挥作用。 在此示例中,我的 EntityManager 只是一个继承自 DBContext 的 class。
测试表:
CREATE TABLE [dbo].[TableA](
[ID] [int] IDENTITY(1,1) NOT NULL,
[FieldA] [nvarchar](50) NULL,
[FieldB] [nvarchar](50) NULL
) ON [PRIMARY]
存储过程:
CREATE PROC spInsertRecord
@FieldA NVARCHAR(50),
@FieldB NVARCHAR(50)
AS
INSERT TableA
(FieldA, FieldB)
VALUES
(@FieldA, @FieldB)
SELECT CAST(@@IDENTITY AS INT)
调用代码 (VB.NET)
Public Shared Function AddRecord(FieldA As String, FieldB As String) As Integer
Try
Using EM As New EntityManager
Return EM.Database.SqlQuery(Of Integer)(
"EXEC spInsertRecord @FieldA, @FieldB",
New SqlParameter("FieldA", FieldA),
New SqlParameter("FieldB", FieldB)).SingleOrDefault
End Using
Catch ex As Exception
Throw New ApplicationException("An error occurred while executing AddRecord", ex)
End Try
End Function
消费代码:
Return AddRecord("Tom", "Halladay")
我的结果是递增的返回值。 希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.