2013-04-12 62 views
1

我有以下存儲過程定義:實體框架的存儲過程的問題

USE [BcmMetrice] 
GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER PROCEDURE [dbo].[ActivityAdd_proc] @Name nvarchar(max),@Description nvarchar(max) =null ,@Users nvarchar(max),@Object_id nvarchar (15) =null, @Source nvarchar(10) =null, @TemplateId bigint =null, @UserID bigint =null 
AS 


DECLARE activityUsers_cursor CURSOR FOR 
select s from dbo.SplitString(@Users, ';') 


DECLARE 
@new_ActivityId bigint, 
@new_CommentId bigint, 
@activityUser_l bigint 

BEGIN TRY 

INSERT INTO [BcmMetrice].[dbo].[Activity] 
      ([Name] 
      ,[Description] 
      ,[Type] 
      ,[Created]) 
    VALUES 
      (@Name 
      ,@Description 
      ,ISNULL(@TemplateId,0) 
      ,GETDATE()) 

SET @new_ActivityId = (SELECT SCOPE_IDENTITY()) 

INSERT INTO [BcmMetrice].[dbo].[Comment] ([UserID],[CommentText],[Timestamp]) 
VALUES (ISNULL(@UserID,151),'Activity has been created',GETDATE()) 

SET @new_CommentId = (SELECT SCOPE_IDENTITY()) 

INSERT INTO [BcmMetrice].[dbo].[ActivityComment] ([ActivityID],[CommentID]) 
VALUES (@new_ActivityId, @new_CommentId) 

INSERT INTO [BcmMetrice].[dbo].[Log]([Timestamp],[Type],[Data],[StackTrace]) VALUES (GETDATE(),'SQL.ActivityAdd_proc','users='+ISNULL(CAST(@Users as varchar(max)),'empty'),null) 

OPEN activityUsers_cursor 
FETCH NEXT FROM activityUsers_cursor INTO @activityUser_l 
WHILE @@FETCH_STATUS = 0 
    BEGIN 

     INSERT INTO [BcmMetrice].[dbo].[Log]([Timestamp],[Type],[Data],[StackTrace]) VALUES (GETDATE(),'SQL.ActivityAdd_proc','Inserting users='+ISNULL(CAST(@activityUser_l as varchar(max)),'empty'),null) 

     INSERT INTO [BcmMetrice].[dbo].[ActivityUser] 
       ([ActivityId] 
       ,[UserId] 
       ,[Role]) 
     VALUES 
       (@new_ActivityId 
       ,@activityUser_l 
       ,1) 

     FETCH NEXT FROM activityUsers_cursor INTO @activityUser_l 
    END 

CLOSE activityUsers_cursor 
DEALLOCATE activityUsers_cursor 

END TRY 

BEGIN CATCH 

PRINT 'ERROR' 
INSERT INTO [BcmMetrice].[dbo].[Log]([Timestamp],[Type],[Data],[StackTrace]) VALUES (GETDATE(),'SQL.ActivityAdd_proc','ERROR CATCHED!'+ERROR_MESSAGE(),null) 


END CATCH 

select @new_ActivityId 

我想要做的事情是從過程中返回一個新加入活動的ID。這就是爲什麼在很和我用線:

select @new_ActivityId 

當測試在SQL Management Studio中的一切此過程似乎是工作的罰款。當我嘗試在我的.NET項目中使用這個過程時,問題就開始了。我更新了我的edmx模型表單數據庫,但是當我執行這個過程時,返回值是無效的。

程序的執行是這樣的:

int ret = dc.Db.ActivityAdd_proc(name, description, users, object_id, source, templateId, userId); 

有沒有人有一個想法,我可能是做錯了什麼?

回答

1

我找到了我的問題的解決方案。當您嘗試通過select語句從存儲過程返回數據時,您必須在edmx的模型瀏覽器中創建函數導入。在嚮導中選擇一種返回的集合類型(在我的例子中它是int64類型的標量)。