[英]SQL query doesn't return the same result in SQL Server and in C#
我在兩個不同的環境中啟動了查詢:
查詢:
SELECT
CASE
WHEN afc.Id IS NULL
THEN fcv.Id
ELSE afc.ParentTemplateFieldContainerId
END AS FieldContainerId,
fcv.TemplateFieldContainerId,
CASE
WHEN fcvp.ProductId IS NULL
THEN '00000000-0000-0000-0000-000000000000'
ELSE fcvp.ProductId
END AS ProductId
FROM
FieldContainerValue fcv
LEFT JOIN
FieldContainerValueAndProduct fcvp ON fcvp.FieldContainerValueId = fcv.Id
LEFT JOIN
ArrayFieldContainer afc ON afc.ChildTemplateFieldContainer = fcv.Id
WHERE
fcv.Id IN ('337c0b2e-a83b-4014-a46a-6ce8bf9fd2c4', 'c2ca899c-28ac-4dc3-bba9-f0741bb02097')
我用來在C#中運行查詢的代碼:
public IEnumerable<T> QuerySql<T> (string sql)
{
using (var conn = new SqlConnection(ConfigMan.GetConfigProperty("ConnectionString")))
{
conn.Open();
conn.EnlistTransaction(Transaction.Current);
return conn.Query<T>(sql);
}
}
SQL
是查詢。
我的查詢返回的類型:
public class FieldContainerValueProperties
{
public Guid FieldContainerValueId { get; set; }
public Guid TemplateFieldContainerId { get; set; }
public Guid ProductId { get; set; }
}
查詢的結果:在兩種情況下,我得到相同數量的項目(2),但FieldContainerId
不同。
在SQL Server Management Studio中:
[
{
"FieldContainerId": "337C0B2E-A83B-4014-A46A-6CE8BF9FD2C4",
"TemplateFieldContainerId": "B4566675-B547-4025-ABBB-F5CC523BB092",
"ProductId": "6E790000-FF4B-0003-C22D-08D68AB637D6"
},
{
"FieldContainerId": "C2CA899C-28AC-4DC3-BBA9-F0741BB02097",
"TemplateFieldContainerId": "591D8371-EDE8-460C-9847-3F2963D875D2",
"ProductId": "6E790000-FF4B-0003-C22D-08D68AB637D6"
}
]
從C#:
[
{
"FieldContainerId": "00000000-0000-0000-0000-000000000000",
"TemplateFieldContainerId": "B4566675-B547-4025-ABBB-F5CC523BB092",
"ProductId": "6E790000-FF4B-0003-C22D-08D68AB637D6"
},
{
"FieldContainerId": "00000000-0000-0000-0000-000000000000",
"TemplateFieldContainerId": "591D8371-EDE8-460C-9847-3F2963D875D2",
"ProductId": "6E790000-FF4B-0003-C22D-08D68AB637D6"
}
]
可能的解釋?
我可以想象的一個可能的解釋是,在一種情況下is null
返回true
,在另一種情況下為false
,但是我不確定。
如果確實如此,您知道什么可能導致此問題嗎?
您的映射無法正常工作。 您的模型類包含FieldContainerValueId
和sql表FieldContainerId
因此當其映射字段名稱時,將其設置為默認值。 更改您的模型類FieldContainerValueId
> FieldContainerId
。 新模式會很好用,
public class FieldContainerValueProperties
{
public Guid FieldContainerId { get; set; }
public Guid TemplateFieldContainerId { get; set; }
public Guid ProductId { get; set; }
}
**我已經在評論部分回答了這個問題。 寫這里只是為了讓帖子得到一個已解決的答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.