[英]Entity Framework returns null on calling stored procedure with temp table even after setting datacontract
我有一個存儲過程,如下所示。 請參閱第1 = 2行用於設置數據上下文。 我從這里的一篇文章中閱讀了此內容。 在我的C#代碼中,我按以下方式調用此存儲過程。 我可以在數據庫中看到存儲過程的結果。 我可以在數據庫中看到2條結果記錄。
但是從下面的C#代碼調用將返回計數2,但兩個記錄的計數都為null和0。 請幫忙。
public class UnreadAlerts
{
public string alertName { get; set; }
public int alertValue { get; set; }
}
public List<UnreadAlerts> AllUnreadAlertsCount(int userId)
{
List<UnreadAlerts> Sdetails = new List<UnreadAlerts>();
using (var context1 = new AltusEntities())
{
Sdetails = context1.Database.SqlQuery<UnreadAlerts>("[dbo].[sp_UnreadAlertsCount] @userid",
new SqlParameter("@userid", userId)
).ToList();
}
return Sdetails;
}
存儲過程代碼:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER Procedure [dbo].[sp_UnreadAlertsCount]
@userId int
AS
BEGIN
IF 1 = 2
BEGIN
SELECT
cast(null as nvarchar(50)) as Aname
,cast(null as int) as Avalue
WHERE
1 = 2
END
CREATE TABLE #Results
(
Aname nvarchar(50),
Avalue int
)
INSERT INTO #Results (Aname, Avalue)
SELECT
'ProximityAlerts',
COUNT(DISTINCT ProximityMeetingAlertID)
FROM
AltusRt.dbo.ProximityMeetingAlerts pma
JOIN
AltusRt.dbo.ProximityMeetings pm ON pma.ProximityMeetingID = pm.ProximityMeetingID
WHERE
pm.RequestID IN (SELECT r.RequestId
FROM Users u
JOIN Requests r ON u.UserId = r.CreatedByUserId
WHERE u.UserId = @userId
AND r.CreatedByUserId = @userId)
INSERT INTO #Results (Aname,Avalue)
SELECT
'MonitorAlerts',
COUNT(*)
FROM
dbo.TargetGeoFenceResult
WHERE
ActiveStatus = 1
SELECT Aname, Avalue
FROM #Results
END
列名稱和屬性名稱不匹配。 結果,這些值永遠不會復制到UnreadAlerts
實例,並且會為您提供默認值int
和string
。
現在,您可以通過更改屬性名稱來修復它:
public class UnreadAlerts
{
public string Aname{ get; set; }
public int Avalue { get; set; }
}
或者,通過使用[ColumnAttribute]
作為別名:
public class UnreadAlerts
{
[Column(Name = "Aname")]
public string alertName { get; set; }
[Column(Name = "Avalue")]
public int alertValue { get; set; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.