带有 SQLite 的 EF Core,代码优先,不区分大小写 包含一列,对其他列敏感

Wap*_*pac 5 sqlite case-sensitive matching ef-code-first entity-framework-core

我有使用 SQLite 数据库和代码优先方法的 EF Core 1.1.0 预览版。我在表 A 和 B 中有两个字符串。我已经检查过,如果我有

IQueryable<T> query = dbSet;
query = query.Where(i => i.A.Contains(pattern));
Run Code Online (Sandbox Code Playgroud)

匹配区分大小写。这就是字符串 A 所需要的,但是当我想查询字符串 B 时,我想指定不区分大小写的匹配。

是否可以?

我目前的解决方法是使用 ToLower:

query = query.Where(i => i.B.ToLower().Contains(pattern.ToLower()));
Run Code Online (Sandbox Code Playgroud)

这很有效,但我不确定这是最好的解决方案。

在我的 OnModelCreating 覆盖中,我尝试使用

  modelBuilder.Entity<E>().Property(i => i.B).HasAnnotation("CaseSensitive", false);
Run Code Online (Sandbox Code Playgroud)

但这没有效果,匹配(不使用 ToLower)仍然区分大小写。

有没有办法说实体内的这个 B 字符串应该总是不区分大小写(即 ==、包含、StartsWith、EndsWith 之类的操作)?

从日志中,我可以看到查询转换为

    SELECT ...
    FROM ... AS "i"
    WHERE ((instr("i"."B", @__pattern_0) > 0) OR (@__pattern_0 = ''))
Run Code Online (Sandbox Code Playgroud)