2011-09-09 3 views
0

GUID을 생성 한 다음이를 NVARCHAR으로 반환하는 저장 프로 시저를 만들었지 만 LINQ to SQL을 사용하여 액세스하려고 시도하면 저장 프로 시저가 ISingleResult. 나는 예상대로 같은 일한 많은 다른 절차를 만들었습니다 : 나는 다음과 같은 오류를 얻을 다음 절차를 사용하여 같은 일을 수행하려고하지만저장 프로 시저가 ISingleResult로 LINQ to SQL에서 인식되지 않음

CREATE PROCEDURE [dbo].[GetContact] 
    @ContactID [int] 
AS 
BEGIN 

    SET NOCOUNT ON; 

SELECT 
    ContactID, 
    PrefixTypeID, 
    FirstName, 
    MiddleName, 
    LastName, 
    Suffix, 
    LanguageTypeID, 
    Organization, 
    OrganizationLocation, 
    OrganizationDepartmentTypeID, 
    OrganizationEmployeeID, 
    JobTitleID, 
    TimeZone, 
    AccountID, 
    PortalID, 
    CorporateAccountID, 
    ContactRelationshipTypeID, 
    EthnicityID, 
    CitizenshipID, 
    EducationID, 
    ContactSalaryRangeID, 
    Age, 
    Birthday, 
    IsMarried, 
    LeadSourceTypeID 
FROM Contact 
WHERE ContactID = @ContactID 

END 

using (Data.Contact.ContactDataContext contactDC = new Data.Contact.ContactDataContext()) 
{ 
    Data.Contact.GetContactResult contactResult = contactDC.GetContact(this.ID).SingleOrDefault(); 
} 

Cannot implicitly convert type 'System.Data.Linq.ISingleResult <OTS.Data.Application.GetSessionResult>' to 'OTS.Data.Application.GetSessionResult'. An explicit conversion exists (are you missing a cast?)

CREATE PROCECURE [dbo].[GetSession] 

AS 

    DECLARE @SessionID [nvarchar](38) = NEWID() 

    INSERT INTO SessionTable (SessionID) VALUES (@SessionID) 

    SELECT @SessionID As SessionID 

SSMS에서 이것을 실행하면 올바른 데이터를 반환하지만 LINQ에서는 그렇지 않습니다. 이 질문과 비슷한 다른 질문은 답이 없거나 대답이 LINQ를 사용하지 않는 것입니다. LINQ를 사용하여이를 수행 할 수있는 방법이 있습니까?

UPDATE


하는 getSession의 코드는 정확히 getContact 같은과 동일합니다. 캐스팅 시도했지만 위의 오류가 나타납니다.

내가 겪고있어 문제는이 유사합니다 Question about linq2sql

우리가 ... 지금은 생산 생성뿐만 아니라하지만, 모든 새로운 절차를 제거없이 성공으로 DBML을 다시 만드는 시도했다 그러나 같은 문제.

UDF를 사용하면 필요한 출력을 얻을 수 있지만 응용 프로그램에서는 작동하지 않습니다. 내 절차에서 나는 데이터를 반환하기 전에 기록의 존재를 확인하고있다. INSERT 또는 UDF의 내부 EXEC 내가 그들을 사용하고 SP를 사용할 필요가 없습니다 수를 할 수 없다는으로

예를

CREATE PROCEDURE [dbo].[GetPage] 
    @PageName [nvarchar](255), 
    @PagePath [nvarchar](255) 
AS 
BEGIN 

    SET NOCOUNTON; 

    DECLARE @PageID [int] 

    IF NOT EXISTS(SELECT PageID FROM Page WHERE PagePath = @PagePath) 
     BEGIN 
      INSERT INTO Page(PageName, PagePath) 
      VALUES(@PageName, @PagePath) 

      SET @PageID = SCOPE_IDENTITY() 
     END 
    ELSE 
     BEGIN 
      SELECT @PageID = PageID 
      FROM Page 
      WHERE PagePath = @PagePath 
     END 

    --For the return values I have tried both ways below with the same results 
    --ReQuery DB for data 
    SELECT PageID, PageName, PagePath 
    FROM Page 
    WHERE PageID = @PageID 

    --Query the Variables 
    SELECT @PageID AS PageID, @PageName AS PageName, @PagePath AS PagePath 

END 

. 어떤 아이디어라도 감사합니다.

답변

0

감독

당신이 using System.Data.Linq뿐만 아니라 데이터 컨텍스트를 포함하는 것을 잊지 마세요 있는지 확인합니다.

1

GetSession 메서드를 호출하는 코드를 Linq에서 Sql로 표시 할 수 있습니까? 절차가 올바른지에

당신은

ISingleResult<GetSessionResult> result = ctx.GetSession(); 

것처럼 위의 호출을 뭔가를하고 있습니다. 오류의 원인은 L2S에서 호출하는 방식 때문이라고 생각합니다.

관련 문제