c# - 使用 Entity Framework Core 检索数据时,我收到重复数据
问题描述
我正在尝试使用 Entity Framework Core 获取数据,并使用 FromSqlRaw 方法还使用 SQL Server 中的存储过程:JSON 输出和 SQL 结果之间的差异如下
var ProjectList = db.Projectlist.FromSqlRaw("EXEC [NI].GetProject @ProCode", ProjectProjectCode).AsEnumerable().ToList();
结果是:
"totalRowCount": 4,
"data": [
{
"proName": "RBC CAS Training",
"proCode": "PR-225/08",
"less": "YY",
"imp": "HK",
"recom": "",
"lastChanged": "2020-06-08T11:31:40.35"
},
{
"proName": "RBC CAS Training",
"proCode": "PR-225/08",
"less": "YY",
"imp": "HK",
"recom": "",
"lastChanged": "2020-06-08T11:31:40.35"
},
{
"proName": "RBC CAS Training",
"proCode": "PR-225/08",
"less": "YY",
"imp": "HK",
"recom": "",
"lastChanged": "2020-06-08T11:31:40.35"
},
{
"proName": "RBC CAS Training",
"proCode": "PR-225/08",
"less": "YY",
"imp": "HK",
"recom": "",
"lastChanged": "2020-06-08T11:31:40.35"
}
]
在数据库结果中
ProCode ProName Less Imp Recom LastChanged
PR-225/08 RBC CAS Training YY HK "" 2020-06-08 11:31:40.350
PR-225/08 RBC CAS Training YY HK "" 2020-06-08 11:31:40.350
PR-225/08 RBC CAS Training XXX XX "" 2020-06-08 11:31:20.973
PR-225/08 RBC CAS Training XXX XX "" 2020-06-08 11:31:20.973
这是我正在使用的查询
SELECT PL.ProID,PS.ProCode,ps.ProName,ll.Less ,ll.Imp,ll.Recom,PL.LastChanged
FROM ProLessonLearn PL
INNER JOIN ProStruct AS ps ON ps.ProID = PL.ProId
INNER JOIN LessLearn AS ll ON ll.LessLeaId = PL.LessLeaId
WHERE PS.ProCode = 'PR-225/08' and PL.Active=1
ORDER BY PS.ProCode
我只是发现没有使用 Entity Framework Core 并使用 SqlCommand 它得到以下结果
{
"totalRowCount": 4,
"data": [
{
"pro Name": "RBC CAS Training",
"proCode": "PR-225/08",
"less": "YY",
"imp": "HK",
"recom": "",
"lastChanged": "2020-06-08T11:31:40.35"
},
{
"proName": "RBC CAS Training",
"proCode": "PR-225/08",
"less": "YY",
"imp": "HK",
"recom": "",
"lastChanged": "2020-06-08T11:31:40.35"
},
{
"proName": "RBC CAMMS Training",
"proCode": "PR-225/08",
"less": "XXX",
"imp": "XX",
"recom": "",
"lastChanged": "2020-06-08T11:31:20.973"
},
{
"proName": "RBC CAMMS Training",
"proCode": "PR-225/08",
"less": "XXX",
"imp": "XX",
"recom": "",
"lastChanged": "2020-06-08T11:31:20.973"
}
]
}
我可以在代码方面解决这个问题。需要帮助
解决方案
这里的问题是您的连接错误并生成重复数据
看一下这个跟踪一个人曾经生活过的地方的系统的简单示例:
Person - Name, AddressId
John, 1
Address - Id, City, UntilDate
1, Chicago, null
这个查询没问题:
SELECT p.* FROM person p JOIN address a ON p.addressid = a.id
John, 1
直到我们为 2000 年搬到纽约的约翰添加另一个地址:
Address - Id, City, UntilDate
1, Chicago, 2000-01-01
1, New York, null
SELECT p.* FROM person p JOIN address a ON p.addressid = a.id
John, 1
John, 1
如果我们显示所有数据,查询将不会有重复:
SELECT * FROM person p JOIN address a ON p.addressid = a.id
John, 1, 1, Chicago, 2000-01-01
John, 1, 1, New York, null
我们忘记了查询是业务需求“创建一个显示活着的用户的页面”的一部分——在这个系统中,当用户不再有当前地址时,他们被标记为已经死亡
SELECT p.*
FROM person p JOIN address a ON p.addressid = a.id
WHERE a.untildate is null
John, 1
这样更好!
因此,您要么得到重复,要么是因为数据库中确实有重复(不太可能),要么是因为您选择的数据子集包含重复数据,因为您没有选择的数据中的某处是导致它独一无二。通过确保排除不相关的数据来修复它(就像我排除了所有用户过去的地址一样)
因为您选择的列子集有重复数据
推荐阅读
- python - 为什么添加 Bootstrap 会阻止我的 Flask 应用程序工作?
- javascript - 显示按钮取决于 React Native 中的变量值
- c - 如何从C中更大的json对象中提取一个json对象作为新的json
- ruby-on-rails - 获取孩子的所有家长协会
- html - Css3 动画在 Firefox 上不起作用(背景褪色)
- css - 这个 CSS 媒体屏幕如何针对分辨率宽度为 1080p 的手机?
- r - 在 R 中拆分数据框并将函数应用于每个部分
- rxjs - Rxjs - 组合 2 个流,仅在先前为 true 时发出
- javascript - 非数值总是出现
- html - Woocommerce - 将 CSS 类添加到商店页面中的图像