我已按照以下 EF Core 5 站点中的步骤操作,以便存储和读取 CosmosDB 中的项目。这是网站:https://www.learnentityframeworkcore5.com/database-providers/cosmos
存储按预期工作,但是当运行教程中的命令来读取项目时,我收到以下错误:
System.InvalidOperationException:“包括导航‘Navigation:Author.Books(列表)Collection ToDependent Book Inverse:Author’不受支持,因为导航未嵌入同一资源中。”
抛出异常的代码行:
var list = context.Authors
.Include(a => a.Books)
.ToList();
EF Core 5 for CosmosDB 似乎不支持 Include 方法。有人对这个问题有经验吗?
为我解决的问题是删除上下文类中单独的
DbSet
,例如DbSet<Book>
。通过它自己的 DbSet
,我的对象被映射到单独的文档;如果没有它,它们将存储在包含文档的数组中(例如 Author
)。
我想您想根据除作者之外的其他信息来查询书籍,但就我而言,我认为我能够使用它。
我会看一下 Microsoft.EntityFrameworkCore.Cosmos。
因为它提供了一种将作者映射到书籍的方法
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Authors>()
.HasMany(p => p.Books);
}
https://learn.microsoft.com/en-us/ef/core/providers/cosmos/planetary-docs-sample https://learn.microsoft.com/en-us/ef/core/modeling/relationships?tabs= Fluent-api%2C Fluent-api-simple-key%2Csimple-key