簡體   English   中英

點網核心中的存儲過程

[英]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的實例,然后嘗試將屬性與列匹配。

由於Tint時沒有匹配的屬性,因此后一部分將失敗。 這就解釋了為什么要獲得所有值為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM