我创建了一个生成GUID
的存储过程,然后将其作为NVARCHAR
返回,但是当尝试使用LINQ to SQL访问它时,它不被识别为ISingleResult
}。我创建了许多其他按预期工作的程序,例如:
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完成这个?
更新
GetSession的代码与GetContact完全相同。我已经尝试过它,但收到上面列出的错误。
我遇到的问题与此类似:Question about linq2sql
但是我们尝试删除并重新创建dbml但没有成功......不仅如此,创建的所有新过程现在都产生了同样的问题。
使用UDF提供我需要的输出,但它不适用于我的应用程序。在我的程序中,我在返回数据之前检查是否存在记录。
例如
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
由于无法在UDF内部执行INSERT
或EXEC
,我无法使用它们并需要使用SP。任何想法都表示赞赏。
答案 0 :(得分:1)
您能告诉我们从Linq到Sql调用GetSession
方法的代码吗?
你在做什么
ISingleResult<GetSessionResult> result = ctx.GetSession();
以上对程序的调用是正确的。我想错误的原因来自你在L2S中调用方法的方式。
答案 1 :(得分:0)
<强>监督强>
确保您不要忘记包含using System.Data.Linq
以及您的数据背景。