首页 > 解决方案 > 在 LINQ 查询中将 POCO 中的属性名称映射到 Cosmos Db 中的字段名称的问题

问题描述

date_sk我有一个在 Cosmos Db 数据库中定义字段的模型,并DateSk在代码中对应:

    public class TestEntity { ...
       [JsonPropertyName("date_sk")]
       public Date DateSk { get; set; }
   }

我对SELECT * FROM c where c.date_sk='2011-11-11'在 Cosmos Db 资源管理器中运行查询没有任何问题,或者在 c# 中作为原始查询运行,如下所示:

   FeedIterator<TestEntity> feeder = GetContainer().GetItemQueryIterator<TestEntity>(
                    new QueryDefinition($"SELECT * FROM c where c.date_sk='2011-11-11'"));

但是,当我尝试运行 LINQ 替代方案时:

var feeder = GetContainer()
                .GetItemLinqQueryable<TestEntity>()
                .Where(f => f.DateSk == "2021-11-11");

它没有抛出任何错误,但没有返回任何内容,当我设置断点以查看在后台运行的 SQL 查询时,我可以看到SELECT VALUE root FROM root WHERE (root["DateSk"] = "2021-11-11"). 它直接显示DateSk使用的属性名称,而不是date_sk使用 JsonPropertyName 属性设置的真实字段名称。有趣的是,如果我使用非 LINQ 查询,映射工作正常,至少数据正确传输一个方向 date_sk->DateSk,所以 JsonPropertyName 属性在其余情况下工作正常

知道有什么问题吗?

标签: azure-cosmosdb

解决方案


推荐阅读