复杂插入存储过程不适合EF?

时间:2011-09-22 12:17:30

标签: sql entity-framework stored-procedures

我正在尝试在现有数据库的基础上构建一个新的应用程序 通过单独的系统检索用户凭据,并将GUID返回给标识用户的客户端应用程序,但是此数据库使用bigInt进行用户标识,以解决数据库中的每个SP使用Mapping功能的问题。根据传入SP的GUID(userID)发现本地UserIdentity 我想使用EF(.Net4.0),但我看不到将GUID传递给SP的方法,以允许DB映射功能确定本地UserIdentity。
映射SP以返回集合工作正常,接收GUID,导出本地UserIdentity并返回'pulse'记录集。更新和删除都很好,因为它们可以使用实体自己的Id值。

我想我真正的问题是“如果SP映射到的实体不包含具有该值的属性,是否有办法将值发送到存储过程?”

这是一个典型的表(EF实体具有相同的属性),它是相应的插入SP。

CREATE TABLE [dbo].[Pulse](
    [Id] [bigint] IDENTITY(1,1) NOT NULL,
    [UserIdentity] [bigint] NOT NULL,
    [Recorded] [datetime] NOT NULL,
    [Value] [int] NOT NULL,

插入SP看起来像这样

    ALTER PROCEDURE [dbo].[Pulse_Insert] @userId uniqueIdentifier, @recorded datetime, @pulse int AS
BEGIN
SET NOCOUNT ON;
        declare @userIdentity bigint
        select @userIdentity = dbo.GUIDUserMapping(@userId)
        insert into dbo.Pulse (UserIdentity, recorded, value)
        values(@userIdentity,@recorded,@pulse)
        END

1 个答案:

答案 0 :(得分:0)

它不是“不适合EF”,但是如果你使用proc进行一次操作(INSERT / UPDATE / DELETE / SELECT,那么EF希望你将procs用于另一个操作。

在这里使用INSTEAD OF触发器会不会更容易?然后EF根本不需要了解它。