簡體   English   中英

投system.object到List<model> asp.net MVC</model>

[英]cast system.object to List<model> asp.net mvc

我有一個普通的 dapper QueryAsync使用dapper的 QueryAsync 獲取list<model>

function 如下所示

public async Task<object> QueryAsync(string spName, DynamicParameters p)
{
    return await Task.Run(async () =>
    {
        object obj = new object();
        IList objectList = obj as IList;
        using (SqlConnection conn = new SqlConnection(_connStr))
        {
            try
            {
                conn.Open();
                obj = (List<object>)await conn.QueryAsync<object>(sql: spName, param: p, commandType: CommandType.StoredProcedure);
            }
            catch (Exception ex)
            {
                Utils.Logger.Instance.LogException(ex);
            }
            conn.Close();
        }
        return obj;
    });
}

現在我從我的 businessLogic 層調用這個方法,如下所示

public async Task<List<GetTemplates>> GetDocTemplates(string TemplateName, int AccountId)
{
    _Parameters.Add("@SP_TemplateName", TemplateName, dbType: DbType.String, direction: ParameterDirection.Input);
    _Parameters.Add("@SP_AccountId", AccountId, dbType: DbType.Int32, direction: ParameterDirection.Input);
    return (List<GetTemplates>)await _Dapper.QueryAsync("[dbo].[GetDocTemplates]", _Parameters);
}

但我收到以下錯誤。

無法將類型為“System.Collections.Generic.List 1[System.Object]' to type 'System.Collections.Generic.List 1[DocPro.DMS.BusinessEntities.Admin.GetTemplates]”。

我不知道上面的代碼有什么問題。

Dapper 在此處創建列表。 如果您希望它成為GetTemplates的列表,那么您將不得不告訴 dapper 這件事,大概是通過使方法通用並調用_Dapper.QueryAsync<GetTemplates>(...) 就是說......老實說,除了連接設置和日志記錄之外,這個方法並沒有真正添加任何東西 - Task.Run是不必要的,吞下失敗的盲目catch是非常危險的,而DynamicParameters是將參數傳遞給 dapper 的最不受歡迎的方式. 建議:

public async Task<List<T>> QueryListAsync<T>(string spName, object parameters)
{
    using var conn = new SqlConnection(_connStr);
    try
    {
        return (await conn.QueryAsync<T>(sql: spName, param: parameters, commandType: CommandType.StoredProcedure)).AsList();
    }
    catch (Exception ex)
    {
        Utils.Logger.Instance.LogException(ex);
        throw;
    }
}
...
public Task<List<GetTemplates>> GetDocTemplates(string TemplateName, int AccountId)
{
    return _Dapper.QueryListAsync<GetTemplates>("[dbo].[GetDocTemplates]", new {
        SP_TemplateName = TemplateName,
        SP_AccountId = AccountId
    });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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