![](/img/trans.png)
[英]How to execute stored procedure with Output parameters using FromSqlInterpolated/Database.ExecuteSqlInterpolated in Dot Net Core 3.1?
[英]Stored Procedure in dot net core
下面是我的方法,它調用存儲過程。
public List<int> GetActivityListforUser(string userId)
{
IList<int> results = new List<int>();
context.LoadStoredProc("dbo.GetRegionOrganizationActivities")
.WithSqlParam("userId", userId)
.ExecuteStoredProc((handler) =>
{
results = handler.ReadToList<int>().ToList();
});
return results.ToList();
}
我的存儲過程dbo.GetRegionOrganizationActivities
,僅返回一列Id,這是在傳遞參數userId時所需的結果。
我的問題在以下行中:
return results.ToList();
我可以看到來自存儲過程的所有列表,但所有int值均為0。列表計數與存儲的proc結果計數匹配,但值應為示例:1、2、3等,它顯示0,0, 0等
誰能提供我做錯事情的一些見解?
看來您正在將Snickler.EFCore nuget包與EF Core一起使用。
簡短答案:您必須創建一個復雜的對象,以允許該庫映射您的結果集,例如:
public class RegionOrganizationActivity
{
public int Id { get; set; }
}
那么您可以使用它來提取您的整數列表:
public List<int> GetActivityListforUser(string userId)
{
IList<RegionOrganizationActivity> results = new List<RegionOrganizationActivity>();
context.LoadStoredProc("dbo.GetRegionOrganizationActivities")
.WithSqlParam("userId", userId)
.ExecuteStoredProc((handler) =>
{
results = handler.ReadToList<RegionOrganizationActivity>();
});
return results.Select(activity => activity.Id).ToList();
}
說明:
handler.ReadToList<int>()
在這里不起作用,因為ReadToList<T>
實現僅支持復雜類型。 假設它需要創建T
的實例,然后嘗試將屬性與列匹配。
由於T
為int
時沒有匹配的屬性,因此后一部分將失敗。 這就解釋了為什么要獲得所有值為0的原因:該方法設法執行的唯一操作是Activator.CreateInstance<int>()
,該方法將返回0。
他們的其他輔助方法ReadToValue
僅支持單個結果值,該方法也不起作用。
這意味着您不能使用該庫將結果直接映射到List<int>
。 因此,您將需要使用復雜的對象來匹配結果集。
這是我最后的方法。
public List<int> GetActivityListforUser(string userId)
{
List<ActivityId> results = new List<ActivityId>();
context.LoadStoredProc("dbo.GetRegionOrganizationActivities")
.WithSqlParam("userId", userId)
.ExecuteStoredProc((handler) =>
{
results = handler.ReadToList<ActivityId>().ToList();
});
List<int> finalresult = new List<int>();
finalresult = results.Select(a=>a.Id).ToList();
return finalresult.ToList();
}
public class ActivityId
{
public int Id { get; set; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.