簡體   English   中英

當將連接引入存儲過程時,Dapper 返回 null

[英]Dapper is returning null when join is introduced to stored procedure

我有一個特殊的問題,我似乎找不到任何答案。 似乎當我向存儲過程引入連接時,Dapper 的映射拒絕正常工作。

我的自定義 object:

public class CustomObject
{
    public string ColumnOne { get; set; }
    public string ColumnTwo { get; set; }
    public DateTime? ColumnThree { get; set; }
    public string ColumnFour { get; set; }
}

在我的存儲庫調用中, customObjects總是返回 0 個結果。

我與 Dapper 的存儲庫調用:

public IEnumerable<CustomObject> GetTheThings(int? integerParameter)
{
    List<CustomObject> customObjects;

    using (var connection = "connection string syntax"))
    {
        string sql = "[storedProcedureName]";

        connection.Open();

        customObjects = connection.Query<CustomObject>(sql,
                new { IntegerParameter = integerParameter },
                commandType: CommandType.StoredProcedure).ToList();
    }

    return customObjects;
}

存儲過程的基本語法:

SELECT  
    t1.column_one AS [ColumnOne],         -- column_one is nvarchar data type
    t2.column_two_thing AS [ColumnTwo],   -- column_two_thing is nvarchar data type
    t2.column_three AS [ColumnThree],     -- column_three is DateTime data type
    t2.column_four AS [ColumnFour]        -- column_four is nvarchar data type
FROM 
    Table1 t1 WITH (NOLOCK)
JOIN 
    Table2 t2 WITH (NOLOCK) ON t1.Identifier = t2.Identifier -- Identifiers are both uniqueidentifier data types
WHERE 
    t1.column_one = @IntegerParameter;

當我直接在 SSMS 中執行此存儲過程時,它會返回我期望的值和我期望的格式

第一欄 第二欄 第三欄 第四欄
文本一 ColumnTwoResultTextOne 2021-12-16 00:00:00.001 ColumnFourResultTextOne
文本一 ColumnTwoResultTextTwo 2021-12-16 00:00:00.001 ColumnFourResultTextTwo
文本一 ColumnTwoResultTextThree 2021-12-16 00:00:00.001 ColumnFourResultTextThree
文本一 ColumnTwoResultTextFour 2021-12-16 00:00:00.001 ColumnFourResultTextFour

當我在運行時使用 Dapper 通過我的應用程序執行時,返回的結果為 0。

出於某種原因,當我刪除連接並手動鍵入依賴於連接的列的值時,我會收到返回的結果。

適當返回結果和映射的腳本:

SELECT  
    t1.column_one AS [ColumnOne],         -- column_one is nvarchar data type
    'Literally anything' AS [ColumnTwo],  -- column_two_thing is nvarchar data type
    GETDATE() AS [ColumnThree],           -- column_three is DateTime data type
    'Anything here too' AS [ColumnFour]   -- column_four is nvarchar data type
FROM 
    Table1 t1 WITH (NOLOCK)
WHERE 
    t1.column_one = @IntegerParameter;

我還嘗試用硬編碼'Literally anything' as [ColumnName]替換每一列,以確保它不僅僅是在 Dapper 翻譯中丟失的屬性,但只要加入,我的方法在運行時不會返回任何結果在查詢中。

我一直在閱讀 Dapper 文檔並仔細閱讀 StackOverflow 和其他資源以獲取任何建議,但找不到我出錯的地方。

任何和所有的幫助或建議將不勝感激!

很難確定,但是您根本沒有得到任何行的事實表明您的兩個表中沒有可以連接的結果。

JOIN 語句默認是內連接。 這將僅返回在兩個表中具有匹配值的記錄。

奇怪的是,您說手動運行查詢確實會返回結果。 為了測試我的理論,您可以將 JOIN 更改為 LEFT JOIN 並查看是否有任何返回。

暫無
暫無

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

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