我正在使用.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";
}
我希望获得数据库中所有传感器的列表,但我只会得到“十字原点”错误。
答案 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,大小)
- 处理查询中的分区键
未解决的问题
- [..]
- 我们应该如何处理需要供稿选项才能跨分区执行的查询?