操作步骤
步骤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
执行视图查询,得到如下结果:
步骤4
l 创建EF实体类
l 通过EF获取数据
问题来了?为啥三条数据的BillNo值一样?查询视图中,值应分别是666,777,888
详细连接地址:http://www.cnblogs.com/xiyang1011/p/4275287.html
l先看看 listAllModel 里面是什么?
listAllModel的数据已经错了.它生成的SQL语句如下:
SELECT
`Extent1`.`LogisticsNo`,
`Extent1`.`ShopCode`,
`Extent1`.`BillNo`
FROM `vtestorderweigh` AS `Extent1`
未加任何Where条件和子查询
@Vincent.Q: 也是3行,一样的
dbContext.vtestorderweighs.ToList(),
上面获取的数据有问题,具体看看是怎么获取的。
它生成的SQL语句如下:
SELECT
`Extent1`.`LogisticsNo`,
`Extent1`.`ShopCode`,
`Extent1`.`BillNo`
FROM `vtestorderweigh` AS `Extent1`
未加任何Where条件和子查询
@Vincent.Q: 查看一下实体类是否有static修饰
说句不好听的话,你这样编程是有问题的。
不知道哪个老师教你tolist的。这样一TOLIST的,如果数据库有1亿条数据,也全部给你取出来放内存里面了。
按照你这种写法
1、数据库里面的查询肯定是没有WHERE的。
2、大数据量时,直接程序就GAME OVER了。
3、这时候的WHERE实际上是在内存里面做的。
正确的写法应该是
var listAllModel=dbcontext.table; (此处千万别TOLIST,切记切记) var query= listAllModel.where(.....);
至于你说的数据问题,从你提供的信息中看不出来。
测试数据,别激动!
EF跟MySQL一起是各种坑,趁早回头吧!
问题原因找到了,是和视图主键有关!以上述表为例,视图设置成:this.HasKey(t => new { t.LogisticsNo, t.BillNo, t.ShopCode });就可以了!