【问题标题】:How to obtain the identity in Entity Framework by using stored procedure?如何使用存储过程获取实体框架中的标识?
【发布时间】:2016-04-03 22:02:14
【问题描述】:

我正在使用 Entity Framework 5 数据库优先方法。现在我将数据插入表中并再次返回IDENTITY

ALTER PROCEDURE [dbo].[spAdmissonSlip_Insert]
(
    @paramStdClassID int,
    @paramFeeMonth varchar(20),
    @paramAdmissionFee int = null,
    @paramTutionFee int,
    @paramFeeSlip int = null,
    @paramResultFile int = null,
    @paramExamFee int = null,
    @paramSciCompFee int = null,
    @paramExtra int  =null
)
AS
BEGIN
    insert into tblFee 
    values (@paramStdClassID, @paramFeeMonth, NULL, @paramAdmissionFee,
            @paramTutionFee, @paramFeeSlip, @paramResultFile,
            @paramExamFee, @paramSciCompFee, @paramExtra, 0);

    select @@IDENTITY;
END

我的问题是如何在前端获取这个IDENTITY。我是否应该使用输出参数或者有任何不同的方法可以在integer 类型变量中得到它。

这是调用语句。

int FeeID = Convert.ToInt32 (OE.spAdmissonSlip_Insert(obj.StdClassID, obj.FeeMonth, obj.AdmissionFee, obj.TutionFee,
                            obj.FeeSlip, obj.ResultFile, obj.ExamFee, obj.SciCompFee, obj.Extra));

这是方法定义..

 public ObjectResult<spAdmissonSlip_Insert_Result> spAdmissonSlip_Insert(Nullable<global::System.Int32> paramStdClassID, global::System.String paramFeeMonth, Nullable<global::System.Int32> paramAdmissionFee, Nullable<global::System.Int32> paramTutionFee, Nullable<global::System.Int32> paramFeeSlip, Nullable<global::System.Int32> paramResultFile, Nullable<global::System.Int32> paramExamFee, Nullable<global::System.Int32> paramSciCompFee, Nullable<global::System.Int32> paramExtra)
{
    ...
}

PS:我是 EF 新手。

【问题讨论】:

  • 您已经选择了 IDENTITY,因此 EF 应该将过程的返回类型检测为整数。
  • 您是否将存储过程映射到 EF 模型?
  • @BassemAKl 它正在返回一列,因此 EF 已将其转换为复杂类型。我现在该怎么办?
  • @Thomas 对不起,我没有找到你。
  • 复杂类型仅包含一个映射到@IDENTITY 的整数属性。您可以在调用映射方法 spAdmissonSlip_Insert() 后访问该属性。

标签: c# sql sql-server entity-framework


【解决方案1】:

回答您关于使用输出参数或其他方法的问题,我在我的应用程序中使用Scope_Identity(),它工作正常。

select @@IDENTITY;这一行更改为:

SELECT Scope_Identity() AS Id

在此线程中查看答案:How to obtain the identity of an entity after calling SaveChanges() when the entity is mapped to stored procedures

如果您对此方法有任何问题,请告诉我。

【讨论】:

    猜你喜欢
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-25
    • 2011-02-17
    • 1970-01-01
    相关资源
    最近更新 更多