Azure|EF Core 6.0 Azure Cosmos DB Provider的新特性

微软中国MSDN 点击上方 蓝字关注我们
EF Core 6.0在今年的11月已经正式发布了 。 团队的成员们一直在努力添加并完善功能 。 其中一个重点领域是 Azure Cosmos DB体验 。 我们收到的反馈是:许多开发人员更愿意使用Cosmos DB , 但仍在等待某些关键功能 。

  • EF Core 6.0: https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-6.0/plan
  • Azure Cosmos DB体验:
    https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-6.0/plan#cosmos-database-provider
行星文档
我在Blazor服务器上创建了一个使用 Azure Cosmos DB 和EF Core的扩展程序 。 它包括搜索功能、交叉引用实体以及一个可以新建、读取和更新的接口 。 我最近升级到最新的EF Core 6.0版本 , 并能够简化和删除相当多的代码!

Azure|EF Core 6.0 Azure Cosmos DB Provider的新特性
文章图片

  • Azure Cosmos DB 和EF Core: https://blog.jeremylikness.com/blog/azure-cosmos-db-with-ef-core-on-blazor-server/
功能概述
以下是我们在EF Core 6.0 Azure Cosmos DB provider中添加的一些特性 。
隐式的所有权
EF Core被构建成一个对象关系映射器 。 在关系数据库中 , 复杂的关系是通过将相关实体存储在单独的表中并使用外键引用它们来表示的 。 EF Core假定在父类中遇到的非实体类型被表示为外键关系 。 使用HasMany或HasOne配置关系 , 并且假设实例与配置的关系独立存在 。 在文档数据库中 , 实体类型的默认行为是假定它们是父类所拥有的嵌入式文档 。 换句话说 , 复杂类型的数据存在于父类型的上下文中 。 在早期版本的EF Core中 , 必须显式地配置此行为 , 使其能够与Azure Cosmos DB provider一起工作 。 在EF Core 6.0中 , 所有权是隐性的 。 这将保存配置并确保行为与其他提供者的NoSQL方法一致 。
例如 , 在 行星文档中有作者和标签 。 这些实体“拥有”一个指向URL和相关文档标题的摘要列表 。 这样 , 当用户问“什么文档有标签X”时 , 我只需要加载一个文档来回答这个问题(我加载标签X , 然后迭代它拥有的标题集合) 。 使用EF Core5,我必须明确声明所有权:
tagModel.OwnsMany( t=> t.Documents);authorModel.OwnsMany( t=> t.Documents);?
在EF Core 6中 , 所有权是隐式的 , 所以除了指定分区键外 , 不需要配置实体 。
  • 行星文档: https://github.com/JeremyLikness/PlanetaryDocs
支持原始集合
在关系数据库中 , 原始集合的建模方法通常是将它们提升为复杂类型 , 或者将它们转换为可序列化的东西以存储在单个列中 。 比如有一篇博客 , 它可以有很多标签 。 一种常见的方法是创建一个代表标签的实体:

推荐阅读