【问题标题】:Entity Framework: Map output parameters from stored procedure?实体框架:从存储过程映射输出参数?
【发布时间】:2012-10-18 20:13:13
【问题描述】:

我想将存储过程的 OUTPUT 参数映射到实体。

例如,

PROCEDURE ForExample
@ID int,
@LastUpdate datetime OUTPUT
AS
Update EntityTable Set LastUpdate = GETDATE() Where ID = @ID
Select @LastUpdate = LastUpdate From EntityTable Where ID = @ID

我想将@LastUpdate 输出参数映射到实体属性。

在“存储过程映射”对话框中,@LastUpdate 参数显示为 InOut 参数(绿色箭头双向)。无论我是否将参数映射到属性,我都会收到相同的错误:

映射函数绑定指定了一个带有不受支持参数的函数 Model.Store.ForExample:LastUpdate。输出参数只能通过 RowsAffectedParameter 属性进行映射。使用结果绑定从函数调用返回值。

我尝试在“结果列绑定”中为 LastUpdate 添加手动绑定,但没有成功。

EF 4 是否支持我正在尝试做的事情?如果支持,它是如何完成的?

【问题讨论】:

    标签: stored-procedures entity-framework-4


    【解决方案1】:

    正如错误文本中所说,“输出参数只能通过 RowsAffectedParameter 属性映射。使用结果绑定从函数调用返回值”

    如果您希望您的过程返回一些值,例如最后一次更新,它应该通过结果集返回它。这意味着,您的存储过程应如下所示:

    PROCEDURE ForExample
    @ID int,
    AS
    Update EntityTable Set LastUpdate = GETDATE() Where ID = @ID
    /*return lastupdate in resultset*/
    Select LastUpdate as LastUpdate From EntityTable Where ID = @ID
    

    您应该将结果集列映射到 lastupdate 属性,如下所示:

    并且存储过程的输出参数只能用于乐观并发。

    【讨论】:

    • 您是否知道要填充“结果列绑定”需要做些什么特别的事情?就我而言,即使我的 SPROC 返回一个数据集,我也没有任何选择余地
    • ^--> NVM。结果列绑定将没有填充值:您必须手动键入它们。这是不幸的,因为必须映射 SPROC,如果设置了输出列/类型,它应该能够自动获取它们..
    【解决方案2】:
    猜你喜欢
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    相关资源
    最近更新 更多