首页 新闻 会员 周边 捐助

EF+MySql使用问题,求解释!

0
悬赏园豆:60 [已解决问题] 解决于 2015-02-06 13:51

操作步骤

步骤1

在MySql中创建表2张,分别是testWeigh和testOrderShip.表脚本如下所示:

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------

-- Table structure for `testweigh`

-- ----------------------------

DROP TABLE IF EXISTS `testweigh`;

CREATE TABLE `testweigh` (

`LogisticsNo` varchar(50) NOT NULL,

PRIMARY KEY (`LogisticsNo`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------

-- Records of testweigh

-- ----------------------------

INSERT INTO `testweigh` VALUES ('FF271237513CN');

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------

-- Table structure for `testordership`

-- ----------------------------

DROP TABLE IF EXISTS `testordership`;

CREATE TABLE `testordership` (

`ShopCode` varchar(50) NOT NULL DEFAULT '',

`BillNo` varchar(50) NOT NULL DEFAULT '',

`LogisticsNo` varchar(50) DEFAULT NULL,

PRIMARY KEY (`ShopCode`,`BillNo`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------

-- Records of testordership

-- ----------------------------

INSERT INTO `testordership` VALUES ('Default', '64909520666335', 'FF271237513CN');

INSERT INTO `testordership` VALUES ('Default', '64909520777335', 'FF271237513CN');

INSERT INTO `testordership` VALUES ('Default', '64909520888335', 'FF271237513CN');

步骤2

创建视图1张,视图脚本如下所示:

create view vtestorderweigh

as

select w.LogisticsNo,s.ShopCode,s.BillNo from testWeigh w left join testOrderShip s on w.LogisticsNo = s.LogisticsNo;

步骤3

执行视图查询,得到如下结果:

clip_image001

步骤4

l 创建EF实体类

clip_image002

l 通过EF获取数据

clip_image004

问题来了?为啥三条数据的BillNo值一样?查询视图中,值应分别是666,777,888

 

详细连接地址:http://www.cnblogs.com/xiyang1011/p/4275287.html

斜杠青年小Q的主页 斜杠青年小Q | 初学一级 | 园豆:5
提问于:2015-02-05 17:20
< >
分享
最佳答案
0

l先看看 listAllModel 里面是什么?

收获园豆:20
Yu | 专家六级 |园豆:12990 | 2015-02-05 17:29

listAllModel的数据已经错了.它生成的SQL语句如下:
SELECT
`Extent1`.`LogisticsNo`, 
`Extent1`.`ShopCode`, 
`Extent1`.`BillNo`
FROM `vtestorderweigh` AS `Extent1`

未加任何Where条件和子查询

斜杠青年小Q | 园豆:5 (初学一级) | 2015-02-05 17:29

@Vincent.Q: 也是3行,一样的

Yu | 园豆:12990 (专家六级) | 2015-02-05 17:31
其他回答(4)
0

dbContext.vtestorderweighs.ToList(),

上面获取的数据有问题,具体看看是怎么获取的。

收获园豆:20
KingMi | 园豆:1344 (小虾三级) | 2015-02-05 17:27

它生成的SQL语句如下:
SELECT
`Extent1`.`LogisticsNo`, 
`Extent1`.`ShopCode`, 
`Extent1`.`BillNo`
FROM `vtestorderweigh` AS `Extent1`

未加任何Where条件和子查询

支持(0) 反对(0) 斜杠青年小Q | 园豆:5 (初学一级) | 2015-02-05 17:30

@Vincent.Q: 查看一下实体类是否有static修饰

支持(0) 反对(0) KingMi | 园豆:1344 (小虾三级) | 2015-02-05 17:37
0

说句不好听的话,你这样编程是有问题的。

不知道哪个老师教你tolist的。这样一TOLIST的,如果数据库有1亿条数据,也全部给你取出来放内存里面了。

按照你这种写法

1、数据库里面的查询肯定是没有WHERE的。

2、大数据量时,直接程序就GAME OVER了。

3、这时候的WHERE实际上是在内存里面做的。

 

正确的写法应该是

var listAllModel=dbcontext.table;
(此处千万别TOLIST,切记切记)
var query= listAllModel.where(.....);

 

至于你说的数据问题,从你提供的信息中看不出来。

收获园豆:10
爱编程的大叔 | 园豆:30844 (高人七级) | 2015-02-05 17:43

测试数据,别激动!

支持(0) 反对(0) 斜杠青年小Q | 园豆:5 (初学一级) | 2015-02-05 21:09
0

EF跟MySQL一起是各种坑,趁早回头吧!

收获园豆:10
上帝之城 | 园豆:2549 (老鸟四级) | 2015-02-05 20:56
0

问题原因找到了,是和视图主键有关!以上述表为例,视图设置成:this.HasKey(t => new { t.LogisticsNo, t.BillNo, t.ShopCode });就可以了!

斜杠青年小Q | 园豆:5 (初学一级) | 2015-02-06 13:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册