本文是讨论EFCore对mysql的支持问题
本文中测试使用的ORM为MySql.Data.EntityFrameworkCore 6.10.6版本
在系统中有一张表:crm.contacts 中包含了first_name和last_name两个字段
通常来说需要查询的时候 需要将这两个字段连接一起进行模糊查询
Mysql支持的sql语句为 select * from `crm.contacts` where concat(first_name, last_name) like concat(‘%‘, ‘abc‘, ‘%‘)
如果在程序中使用dbcontext.CrmContacts.Where(s => (s.FirstName + s.LastName).Contains("abc")),
由Nero Profile SQL 截获该ORM框架解析出来的SQL语句为 select * from `crm.contacts` where first_name+ last_name like concat(‘%‘, ‘abc‘, ‘%‘)
Mysql并不支持上述的sql语句
如果在程序中使用dbcontext.CrmContacts.Where(s => string.Contat(s.FirstName + s.LastName).Contains("abc")),
由Nero Profile SQL 截获该ORM框架解析出来的SQL语句为 select * from `crm.contacts`
ORM会获取该表的所有内容在内存中进行查询
但是在SQLServe中select * from [crm.contacts] where first_name+ last_name like ‘%abc%‘ 是可以被解析的 所以不存在这样的问题