C#-.NET-跨分区查询是必需的,但在我获取时已禁用

时间:2019-01-23 08:48:11

标签: c# .net entity-framework-core azure-cosmosdb azure-cosmosdb-sqlapi

我正在使用.net核心和CosmosDb SQL API构建一个Web API。我的post方法有效,但是当我尝试从数据库中获取数据时,出现错误“需要跨分区查询但已禁用”。

我正在使用cosmosdb sql的实体框架核心,我发现了一个使用feedoptions来启用交叉分区的“解决方案”,但是我使用的查询与在我发现的“解决方案”中使用的方式不同。因此,我不知道在哪里插入feedoptions,或者这是否对我来说是正确的解决方案。

单击here作为我找到的“解决方案”。

在SensorController.cs中获取方法:

    [HttpGet]
    public ActionResult<IEnumerable<Sensor>> Get()

    {

        var bookmarks = _sensorContext.Sensors.ToList();

        return Ok(bookmarks);

    }

SensorContext.cs:

    public SensorContext(DbContextOptions options) : base(options)
    {
    }


    public DbSet<Sensor> Sensors { get; set; }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Sensor>();
        var sensors = modelBuilder.Entity<Sensor>().Metadata;
        sensors.CosmosSql().CollectionName = "Sensors";
    }

我希望获得数据库中所有传感器的列表,但我只会得到“十字原点”错误。

2 个答案:

答案 0 :(得分:1)

似乎您正在使用旧版本的CosmosDB实体框架。 确保下载最新的NuGet软件包,该软件包当前为:

dotnet add package Microsoft.EntityFrameworkCore.Cosmos -v 3.0.0-preview.18572.1

之后,您可以尝试以下演练: Announcing Entity Framework Core 2.2 Preview 3

我设法通过执行上面链接中显示的步骤来创建和检索文档。

答案 1 :(得分:0)

如果您的sensors数据是如此之小,以至于您可以在一个HTTP请求中返回所有数据,那么您可能不需要集合上的分区键。

使用EntityFramework访问CosmosDB时,当前无法指定分区键。看来他们正在考虑将其用于版本3-see this Github Issue

  

3.0预览版3

     
      
  • [..]
  •   
  • 用于配置文档收集方面的API(用于分区键,RU,大小)
  •   
  • 处理查询中的分区键
  •   
     

未解决的问题

     
      
  • [..]      
        
    • 我们应该如何处理需要供稿选项才能跨分区执行的查询?
    •   
  •