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のメソッドを呼び出す方法からだと思います。

関連する問題