繁体   English   中英

EF 4.1 代码优先:执行存储过程并返回 IDENT

[英]EF 4.1 Code First: Execute Stored Proc and return IDENT

我正在尝试使用context.Database来执行插入记录并返回标识的存储过程。 我知道我的 proc 可以工作,使用 output 参数、select 或返回,但我无法让ExecuteSqlCommandSqlQuery<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_IDENTITYRETURN 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM