EF SQLite的Like语句,生成为CHARINDEX的解决办法
在使用EF SQLite的时候发现Like语句不能完全查询出来,看了下生成的SQL语句类似于这种
(CHARINDEX(@p__linq__2, [Extent1].[LeagueName])) > 0)
查了下资料,在SQLite中是不支持CHARINDEX这个函数的,其实解决办法很简单,我们只要自己实现个Interceptor,再替换一下SQL语句,然后添加到EF中就可以了,下面是Interceptor的实现:
private static Regex replaceRegex = new Regex(@"\(\(CHARINDEX\((.*?), (.*?)\)\) > 0\)");
private void ReplaceCharIndexFunc(DbCommand command)
{
var flag = false;
var text = replaceRegex.Replace(command.CommandText, m =>
{
if (!m.Success) return m.Value;
flag = true;
var key = m.Groups[1].Value;
var name = m.Groups[2].Value;
//替换参数
foreach (DbParameter commandParameter in command.Parameters)
{
if (commandParameter.ParameterName == key.Substring(1))
{
commandParameter.Value = $"%{commandParameter.Value}%";
break;
}
}
return $"{name} LIKE {key}";
});
if (flag)
command.CommandText = text;
}
首先是正则替换掉所有的CHARINDEX,然后是修改查询的值。然后我们在EF中把Interceptor添加上去:
public QiuTanDb() : base("name=defaultConn")
{
DbInterception.Add(new SqliteInterceptor());
}
EF SQLite的Like语句,生成为CHARINDEX的解决办法的更多相关文章
- EF 表中中多次指定了列名解决办法
这个问题是我们实际开发中遇到过的问题. 可能的原因:数据库在执行数据表迁移的时候,数据表执行成功,最后插入EF数据迁移表__MigrationHistory的时候,没有把所有的命令行完整插入,缺失了一 ...
- Sql语句不能识别Go的解决办法(动态创建表的触发器)
问题来源 用sqlserver直接打开sql文本,执行没问题,但是当用Sqlcommand类执行cmdtext命令文本时总是失败报错. 原因分析及解决 用数据库直接执行sql语句没问题,甚至还可以用G ...
- SQL Server 2008 r2 输入SQL语句不能自动提示的解决办法
先利用“配置工具-SQL Server 配置管理器”关闭所有MSSQLSERVER服务,利用SQL Server Installation Center,进入Maintenance,选择Repair, ...
- 关于vs2013 mysql Ef框架中提示版本不兼容问题的解决办法
<runtime> <assemblyBinding> <dependentAssembly> <assemblyIden ...
- 【JMeter】if语句中不能Failure=false解决办法
错误写法: if(roomId.matches("regEx")) Failure=false; else{ Failure=true; FailureMessage=" ...
- EF 解除属性映射到数据库中 NotMappedAttribute无效解决办法
可以通过NotMappedAttribute标记模型某个属性可以使该属性不必映射到数据库. public class Unicorn { public int Id { get; set; } [No ...
- EF生成的SQL语句执行顺序问题。
//实体被更改后,再做删除,EF只生成删除语句 //实体删除后再更改,EF报错 //添加语句会再,更改,删除后执行,更AddObject位置无关 //一个实体多个字段被改,只会生成一句update / ...
- EF中执行sql语句,以及事务
EF to sql string sql = "select T_Task.BSID,T_Task.CloseDate,T_Task.CompleteDate,T_Task.CloseUse ...
- EF中使用SQL语句或存储过程
EF中使用SQL语句或存储过程 1.无参数查询var model = db.Database.SqlQuery<UserInfo>("select* from UserInfoe ...
随机推荐
- jar包解压
jar -xvf project.jar 解压到当前文件夹
- Spring MVC 使用tomcat中配置的数据源
Spring MVC 使用tomcat中配置的数据源 配置tomcat数据源 打开tomcat目录下的conf目录,编辑sever.xml目录.在<GlobalNamingResources&g ...
- 制作二维码java
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 【luogu P3366 最小生成树】 题解 Prim
include include include include using namespace std; const int maxn = 505000; int n, m, dis[maxn], v ...
- 关键字: simpledateformat24小时 格式串
SimpleDateFormat 是 Java 中一个非常常用的类,该类用来对日期字符串进行解析和格式化输出 Era 标志符 Text AD y 年 Year 1996; 96 M 年中的月份 M ...
- jquery遍历数组
示例: ajax返回的数组进行遍历 $.ajax({ type:"POST", url:"<?php echo base_url(); ?>public_re ...
- 使用OpenVPN连通管理多个阿里云VPC网络
这篇文章比较长,将从需求.思路.原理.架构.实施步骤.细节分析.高可用等几个方面来讲述OpenVPN的使用,如果看到很熟悉的内容或者不感兴趣的部分,请您跳过. 需求 公司网络环境更换,导致原来连接阿里 ...
- DB数据源之SpringBoot+MyBatis踏坑过程(四)没有使用连接池的后果
DB数据源之SpringBoot+MyBatis踏坑过程(四)没有使用连接池的后果 liuyuhang原创,未经允许禁止转载 系列目录连接 DB数据源之SpringBoot+Mybatis踏坑过程实 ...
- js检测是否可以访问公网服务器
wifi认证开发过程所用到的,源码如下: 注:检测AC是否放行成功,是否可以访问公网阿里云服务器 功能调用: checkNet().then(function(res) { if(res) { //连 ...
- python初学者日记01(字符串操作方法)
时间:2018/12/16 作者:永远的码农(博客园) 环境: win10,pycharm2018,python3.7.1 1.1 基础操作(交互输入输出) input = input(" ...