2013-09-23 3 views
1

LINQ 및 DataContext를 사용하여 데이터를 검색하고 있습니다. 엔티티 프레임 워크를 사용하지 않습니다. 그리고 지금 나는 LINQ를 사용하여 저장 프로 시저에서 값 가져 오기

  1. 방법 매개 변수를 제공하는 모르고
  2. 어떻게 정의하고 (단일 값)의 결과를 얻기 위해 저장 프로 시저가 있습니다.

는 저장 프로 시저가 이런 식으로 정의된다 :

CREATE PROCEDURE [dbo].[spGetConvertedFieldValue] 
-- Add the parameters for the stored procedure here 
    @Table NVARCHAR(50), 
    @Field NVARCHAR(50), 
    @Key NVARCHAR(50), 
    @KeyValue NVARCHAR(500) 
AS 
BEGIN 
-- SET NOCOUNT ON added to prevent extra result sets from 
-- interfering with SELECT statements. 
SET NOCOUNT ON; 

    DECLARE @SQL NVARCHAR(MAX) 

    SET @SQL = 'SELECT ' + @Field + ' FROM ' + @Table + ' WHERE ' + @Key + ' = ''' + @KeyValue + '''' 

EXEC(@SQL) 
END 

이 매우 일반적인 저장 프로 시저있다시피! 이런 식으로하는 이유는 위의 값을 입력 할 수있는 다른 테이블이있어서 시스템이 내 최종 결과를 작성할 수 있기 때문입니다.

그러나 나는 여기에 재고가 많습니다. 기사를 읽었습니다 : http://www.codeproject.com/Articles/37938/Simple-6-steps-to-use-stored-procedure-in-LINQ 저장 프로 시저를 호출하는 방법이 지정되어 있습니다. 그러나 적어도 내가 참조하는 테이블 (2 단계)을 정의 할 수 있어야한다는 것입니다.

그리고 위의 기사는 내 주장을 추가하는 방법을 설명하지 않습니다.

옵션이 될 수있는 저장 프로 시저를 사용하지 않아도 결과를 만들 수 있다면! 내 테이블을 polulate과의 ID를 반환 할 수있는 저장 프로 시저를 만들

CREATE TABLE [dbo].[TemporaryParking](
[Id] [int] IDENTITY(1,1) NOT NULL, 
[Field] [nvarchar](max) NULL, 
CONSTRAINT [PK_TemporaryParking] PRIMARY KEY CLUSTERED 
(
    [Id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS =  ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 10) ON [PRIMARY] 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 
GO 

다음 :

우선은 새 테이블이라고 TemporaryParking를 만들 :이 좋아

+3

Visual Studio에서 데이터 소스 창에서 dbml 디자이너로 저장 프로 시저를 끌면이 모든 작업이 자동으로 수행되지는 않습니까? –

+0

다음 질문은 : 왜 안 되니? 전체 엔터티 모델을 만들 필요는 없습니다. SQL 데이터 세트에 LINQ를 추가하고 SP를보기로 끌어 놓습니다. 그럼 당신은 그것을 부를 수 있습니다. –

+0

전체 엔터티 모델을 만들 필요가 없습니다. SQL 데이터 소스에 LINQ를 추가하고 저장 프로 시저를 뷰에 끌어 놓기 만하면됩니다. 그럼 당신은 그것을 부를 수 있습니다. 나는 당신이 링크 한 CodeProject 기사를 빠르게 훑어 보았고, 기본적으로 그들은 코드에서만 똑같은 일을하는 것처럼 보인다. –

답변

0

는 해결 방법입니다 새로운 삽입 값 : 내 응용 프로그램에서

CREATE PROCEDURE [dbo].[spGetConvertedFieldValue] 
-- Add the parameters for the stored procedure here 
@Table NVARCHAR(50), 
@Field NVARCHAR(50), 
@Key NVARCHAR(50), 
@KeyValue NVARCHAR(500) 
AS 
BEGIN 
SET NOCOUNT ON; 

DECLARE @SQL NVARCHAR(MAX) 

SET @SQL = 'INSERT INTO TemporaryParking (Field) SELECT ' + @Field + ' FROM ' + @Table + ' WHERE ' + @Key + ' = ''' + @KeyValue + '''' 

EXEC(@SQL) 

RETURN @@Identity 
END 

내 저장 프로 시저 spGetConvertedFieldValue를 '포함'은하면 .dbml 파일을 만들었습니다.

이 절차가 삽입 된 값에서 아이디를 반환하고 내가 값을 얻을 경우 나는 간단한 LINQ 문을 생성 할 수 있습니다 전화 :

'lets assume that I now have the Id in a variable calle tmpId 

var rv = (from f in _db.TemporaryParking 
     where f.Id == tmpId 
     select f.Field).First(); 

와 나는, 내가 심지어 정리할 수 있습니다하려는 경우 TemporaryParking에서 값을 다시 삭제합니다.

올바른 방향으로 나를 가리켜 주신 Thorsten Dittmar에게 감사드립니다! 귀하의 대답은 전체 트릭을하지 못했습니다.

관련 문제