Entity Framework 区分大小写的查询

Entity Framework Case Sensitive Query

我有一个名为 Post 的 table,其中有一列名为 key:

  Id | Key | Title
 --------------------
   1 | WM  | First
 --------------------
   2 | wm  | Second

如您所见,Post 的第一个 key 值是 WM(大写),第二个 key 值是 wm(小写) ).

当我使用以下代码执行查询时:

var post = await _posts.Where(o => o.Key == key).Select(o => new
    {
        id = o.Id,
        title = o.Title
    }).SingleOrDefaultAsync();

我用一个值(wm 和 WM)传递了 key,但得到了一个结果。第二个(wm).

我搜索了解决方案并找到了这个 question 还有这个 answer。在我尝试使用答案并在搜索 wm 时实现 [CaseSensitive] 数据注释后,我返回第一个 post,当我搜索 WM 时,我得到 null. 我怎样才能解决这个问题并获得足够的 post 密钥?

更新: 已生成 SQL 查询:

   SELECT [Limit1].[C1]    AS [C1],
       [Limit1].[Id]    AS [Id],
       [Limit1].[Title] AS [Title]
FROM   (SELECT TOP (2) [Extent1].[Id]    AS [Id],
                       [Extent1].[Title] AS [Title],
                       1                 AS [C1]
        FROM   [dbo].[Posts] AS [Extent1]
        WHERE  ([Extent1].[Key] = 'wm' /* @p__linq__0 */)
                OR (([Extent1].[Key] IS NULL)
                    AND ('wm' /* @p__linq__0 */ IS NULL))) AS [Limit1]

我用同样的改变解决了这个问题:

  1. Key 数据类型更改为 varchar

  2. 并执行 SQL 查询 SqlQuery<T>:

    var post = await _uow.Database
                .SqlQuery<PostUrlDto>(
                    "SELECT Id , Title FROM Posts WHERE [Key] = @postkey COLLATE SQL_Latin1_General_CP1_CS_AS",
                    new SqlParameter("postkey", postkey)).SingleOrDefaultAsync()