首页 新闻 会员 周边

Entity Framework 查询历史最严重bug求解十万火急

0
悬赏园豆:20 [已解决问题] 解决于 2013-08-09 13:43

先上图这是利用EF生成的SQL语句在数据库里面查询出来的数据。对应的Id的日期是22号这都对着。

但是在EF返回来的集合里面的数据确实如下:

同样Id对应日期往后推了一天。不知其解。

因为7.22号这条数据有几个价格列是空的。查出来就有问题。我把为空的那几个列设置一定的值确是对的。

希望碰到过此类问题的高手能给小弟分析一下。

EF
问题补充:

这块这个SQL语句就是不加日期条件。也会出现此问题。

但是还有一个奇怪的问题。我这个id的第一条数据就是从今天7.22号开始的。如果我把7.23号的价格清空就不会出现此问题。

江宁织造的主页 江宁织造 | 初学一级 | 园豆:73
提问于:2013-07-22 09:39
< >
分享
最佳答案
-3

呵呵.我真不知道,有些人推崇EF的原因何在

(除了lamda/linq,我真找不出一个理由我用它)

1.不能很好支持其它数据库

2.多数据源问题麻烦

3.数据库变动不变 迁移不方便(到其他数据库)

4.性能可控性不高,实战性不强

收获园豆:20
迅捷网络[来送福利] | 小虾三级 |园豆:576 | 2013-07-22 10:02
其他回答(5)
0

我猜想 ,你获取结果后的循环是用来统计价格的吧 ? 因为图被遮盖了看不到

有两个方法可以解决

1.就是在循环判断中过滤价格为 Null的

2.就是在查询语句过滤掉

PC286 | 园豆:202 (菜鸟二级) | 2013-07-22 09:59

我是查询价格为空或者不为空的都要查。现在是有部分列为空的话。同样的Id对应的日期就不对了。第二天数据好着呢。而且日期也对应这第二条的ID

支持(0) 反对(0) 江宁织造 | 园豆:73 (初学一级) | 2013-07-22 10:05

@江宁织造: 用一个纯sql让EF执行,看看结果ok不.不要计算后的sql

支持(0) 反对(0) 迅捷网络[来送福利] | 园豆:576 (小虾三级) | 2013-07-22 11:08
0

DAY在实体中定义的类型是什么?

dudu | 园豆:31003 (高人七级) | 2013-07-22 10:19

时间的可空类型public DateTime? DAY{ get;set; }

支持(0) 反对(0) 江宁织造 | 园豆:73 (初学一级) | 2013-07-22 10:21

@江宁织造: 出问题时你究竟用的是LINQ查询还是问题补充中的sql语句?

支持(0) 反对(0) dudu | 园豆:31003 (高人七级) | 2013-07-22 10:26

@dudu: 两种方式都产生此问题。还有就是我们另一个纯ADO.NET 的项目就对着。

支持(0) 反对(0) 江宁织造 | 园豆:73 (初学一级) | 2013-07-22 10:30

@江宁织造: MARKET_PRICE, LOCAL_PRICE, GROUP_PRICE在实体中的类型是如何定义的?

支持(0) 反对(0) dudu | 园豆:31003 (高人七级) | 2013-07-22 10:34

@dudu: 

支持(0) 反对(0) 江宁织造 | 园豆:73 (初学一级) | 2013-07-22 10:36

@江宁织造: 不是数据库,是代码中的实体类

支持(0) 反对(0) dudu | 园豆:31003 (高人七级) | 2013-07-22 10:41

@dudu: 

支持(0) 反对(0) 江宁织造 | 园豆:73 (初学一级) | 2013-07-22 10:46

@江宁织造: 问题中的第一张图是Entity Framework实际生成的SQL语句吗?

支持(0) 反对(0) dudu | 园豆:31003 (高人七级) | 2013-07-22 11:01

@dudu: 是的。语句都没问题。就是返回来的集合里面的数据产生了问题。只根据ID查数据也会出现此问题。

支持(0) 反对(0) 江宁织造 | 园豆:73 (初学一级) | 2013-07-22 13:01

@dudu: 问题好像真的是EF的某种机制造成的。我被迫用原生的ADO.NET对象就可以正确查出来。

支持(0) 反对(0) 江宁织造 | 园豆:73 (初学一级) | 2013-07-22 16:00

@江宁织造: 感谢站长的回答。我的问题最终原因还并不是EF本身造成的,而是我使用有误造成的。最终的原是我EF的上下文那块出的问题。

支持(0) 反对(0) 江宁织造 | 园豆:73 (初学一级) | 2013-07-22 16:43
0

endtime  為啥加 23:59:59   這個地方出問題了吧  你在這個地方  加了一天啊   所以結果出來是多了一天的結果

dylan2019 | 园豆:151 (初学一级) | 2013-07-22 10:33

即便设置为00:00:00.000也出现同样的问题。

支持(0) 反对(0) 江宁织造 | 园豆:73 (初学一级) | 2013-07-22 10:49

@江宁织造: 用一个纯sql让EF执行,看看结果ok不.不要计算后的sql

支持(0) 反对(0) 迅捷网络[来送福利] | 园豆:576 (小虾三级) | 2013-07-22 11:00

@江宁织造: 應該還是你程序中處理的時候 出問題了 你那段代碼  圖片太小看不清楚 程序在處理時間的時候有問題 你在好好查查看你程序 邏輯

支持(0) 反对(0) dylan2019 | 园豆:151 (初学一级) | 2013-07-22 11:04

@[秦时明月]: 不行,select ID,NJL_BOOK_ID,MARKET_PRICE,LOCAL_PRICE,GROUP_PRICE,DEPOSIT,DAY,DESCRIPTION,TYPE_CODE,COST_PRICE from NJL_ORDER_PRICE where NJL_BOOK_ID=@NJL_BOOK_ID

直接只id条件还是跟之前的一样。我给第一条执行update NJL_ORDER_PRICE  set MARKET_PRICE='65.00',LOCAL_PRICE='62.00',GROUP_PRICE='59.00',DEPOSIT=''   where id='FCDCEE1A-807D-4EF1-9324-D78903862D15'这个语句。它就可以正常查出来。价格列要是为空就会出现此问题。但是id和其他值都查对应这。就是日期这块老是往后了一天。

支持(0) 反对(0) 江宁织造 | 园豆:73 (初学一级) | 2013-07-22 11:14

@江宁织造: 无语.就是讲:和时间无关?只要价格为NULL,就会出现跳行的问题

支持(0) 反对(0) 迅捷网络[来送福利] | 园豆:576 (小虾三级) | 2013-07-22 11:16

@[秦时明月]: 对的。但是还有一个奇怪的问题。我这个id的第一条数据就是从今天7.22号开始的。如果我把7.23号的价格清空就不会出现此问题。

支持(0) 反对(0) 江宁织造 | 园豆:73 (初学一级) | 2013-07-22 11:19

@江宁织造: 重新建一个项目做测试,看看

支持(0) 反对(0) 迅捷网络[来送福利] | 园豆:576 (小虾三级) | 2013-07-22 11:20

@dylan2019: 看图片的时候在谷歌浏览器下可以右键在新标签页中打开图片。其他浏览器可以复制图片地址打开。

支持(0) 反对(0) 江宁织造 | 园豆:73 (初学一级) | 2013-07-22 11:21

@[秦时明月]: 我试试。

支持(0) 反对(0) 江宁织造 | 园豆:73 (初学一级) | 2013-07-22 11:30

@江宁织造: 加個排序看一下  我之前在做分頁的時候也遇到過這種情況 就是因為排序的問題導致的

支持(0) 反对(0) dylan2019 | 园豆:151 (初学一级) | 2013-07-22 11:41

@dylan2019: 排序?呵呵,必然不是.数据都出现问题了

支持(0) 反对(0) 迅捷网络[来送福利] | 园豆:576 (小虾三级) | 2013-07-22 11:52

@[秦时明月]: 问题好像真的是EF的某种机制造成的。我被迫用原生的ADO.NET对象就可以正确查出来。

支持(0) 反对(0) 江宁织造 | 园豆:73 (初学一级) | 2013-07-22 16:00

@dylan2019: 问题好像真的是EF的某种机制造成的。我被迫用原生的ADO.NET对象就可以正确查出来。你们可以做给跟我这种需求类似的实验。

支持(0) 反对(0) 江宁织造 | 园豆:73 (初学一级) | 2013-07-22 16:04

@江宁织造: 改为 public DateTime DAY{ get;set; } 试试

支持(0) 反对(0) dudu | 园豆:31003 (高人七级) | 2013-07-22 16:07
0

是单单这一条加一天,还是全部都加一天?

Yu | 园豆:12980 (专家六级) | 2013-07-22 14:05

单单是这一条。其他的都好着。但是如果我第一条的那些价格字段不为空,但是第二条为空数据就正常读取出来。

支持(0) 反对(0) 江宁织造 | 园豆:73 (初学一级) | 2013-07-22 14:39

@江宁织造: 那你试试 OrderByDesc 一下 把它放在最后一条,看看会不会还是加一天

支持(0) 反对(0) Yu | 园豆:12980 (专家六级) | 2013-07-22 14:54

@Yu: 问题好像真的是EF的某种机制造成的。我被迫用原生的ADO.NET对象就可以正确查出来。你们可以做一下实验。

支持(0) 反对(0) 江宁织造 | 园豆:73 (初学一级) | 2013-07-22 16:00

@江宁织造: 不可能把 之前用過ef 沒有遇到這種情況啊  你排序根據某字段排序 試試看 與時間字段可為空 應該沒關係吧

支持(0) 反对(0) dylan2019 | 园豆:151 (初学一级) | 2013-07-22 16:11

@dylan2019: 感谢你们的回答。我的问题最终解决了。最终的原因并不是EF这种查询不行。而是我EF的上下文那块出的问题。

支持(0) 反对(0) 江宁织造 | 园豆:73 (初学一级) | 2013-07-22 16:42

@Yu: 感谢你们的回答。我的问题最终解决了。最终的原因并不是EF这种查询不行。而是我EF的上下文那块出的问题。

支持(0) 反对(0) 江宁织造 | 园豆:73 (初学一级) | 2013-07-22 16:42
0

同事找到问题的所在原因了。

江宁织造 | 园豆:73 (初学一级) | 2013-07-22 16:44

????????????????????

支持(0) 反对(0) 迅捷网络[来送福利] | 园豆:576 (小虾三级) | 2013-07-22 17:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册