我有一個奇怪的問題,我似乎找不到任何答案。似乎當我向存盤程序引入連接時,Dapper 的映射無法正常作業。
我的自定義物件:
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 和其他資源以獲取任何建議,但找不到我出錯的地方。
任何和所有的幫助或建議將不勝感激!
uj5u.com熱心網友回復:
您根本沒有得到任何行的事實表明您的兩個表中沒有可以連接的結果。
默認情況下,JOIN 陳述句將是內部聯接。這將僅回傳在兩個表中具有匹配值的記錄。
編輯:在這種情況下,在 SSMS 和 Dapper 中運行查詢之間的不一致是因為連接字串中帳戶的權限不同。因此,無法訪問其中一個表中的資料,因此 JOIN 沒有回傳任何行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/384646.html
標籤:C# sql-server 查询语句 小巧玲珑
下一篇:更新sql結果集
