MongoDB EF Core 提供程序新功能有哪些?
摘要:原文 | Rishit, Luce 翻译 | 郑子铭 这是 Rishit Bhatia 和 Luce Carter 的客座文章。Rishit 是 MongoDB 的高级产品经理,专注于 .NET 开发人员体验,在进入产品管理部门之前,他已经
原文 | Rishit, Luce
翻译 | 郑子铭
这是 Rishit Bhatia 和 Luce Carter 的客座文章。Rishit 是 MongoDB 的高级产品经理,专注于 .NET 开发人员体验,在进入产品管理部门之前,他已经使用 C# 工作多年。Luce 是 MongoDB 的开发倡导者、Microsoft MVP,热爱代码、阳光和学习。本博客由 Microsoft .NET 团队针对 EF Core 进行了审阅。
MongoDB 的 EF Core 提供程序于 2024 年 5 月正式发布。自六个月前首次发布此软件包的预览版以来,我们已经取得了长足的进步。我们想分享一些我们一直在研究的有趣功能,如果没有 Microsoft .NET 数据和实体框架团队的支持和合作,这些功能是不可能实现的。
在这篇文章中,我们将使用 MongoDB EF Core 提供程序和 MongoDB Atlas 来展示以下内容:
向实体添加属性并进行更改跟踪
利用出口创建索引
执行复杂查询
事务和乐观并发
与本博客相关的代码可以在 Github 上找到。入门样板代码位于“start”分支中。包含下面提到的所有功能亮点的完整代码位于“main”分支中。
先决条件
我们将使用示例数据集 — 具体来说,本示例中 MongoDB Atlas 可用的 sample_mflix 数据库中的电影集合。要使用示例数据设置 Atlas 集群,您可以按照文档中的步骤操作。我们将创建一个简单的 .NET 控制台应用程序来开始使用 MongoDB EF Core 提供程序。有关如何执行此操作的更多详细信息,您可以查看快速入门指南。
此时,您应该已连接到 Atlas 并能够从快速入门指南中正在读取的电影中输出电影情节。
功能亮点
添加属性和更改跟踪
MongoDB 文档模型的优点之一是它支持灵活的架构。再加上 EF Core 支持 Code First 方法的能力,您可以动态向实体添加属性。为了展示这一点,我们将向我们的模型类添加一个名为 adapted_from_book 的新可空布尔属性。这将使我们的模型类如下所示:
public class Movie
{
public ObjectId Id { get; set; }
[BsonElement("title")]
public string Title { get; set; }
[BsonElement("rated")]
public string Rated { get; set; }
[BsonElement("plot")]
public string Plot { get; set; }
[BsonElement("adaptedFromBook")]
public bool? AdaptedFromBook { get; set; }
}
现在,我们将为找到的电影实体设置这个新添加的属性,并在保存更改后查看 EF Core 的更改跟踪功能。为此,我们将在打印电影情节后添加以下代码行:
movie.AdaptedFromBook = false;
await db.SaveChangesAsync();
在运行程序之前,让我们转到 Atlas 中的集合并找到这部电影,以确保这个新创建的字段 adapted_from_book 不存在于我们的数据库中。为此,只需转到 Atlas Web UI 中的集群并选择浏览集合。
然后,从 sample_mflix 数据库中选择电影集合。在过滤器选项卡中,我们可以使用以下查询找到我们的电影:
{title: "Back to the Future"}
这应该可以找到我们的电影,并且我们可以确认我们想要添加的新字段确实没有被看到。
接下来,让我们在刚刚添加的两行代码中添加一个断点,以确保我们可以在继续操作时实时跟踪更改。选择“开始调试”按钮来运行应用程序。当第一个断点被击中时,我们可以看到本地字段值已被分配。
让我们点击“继续”并检查数据库中的文档。我们可以看到新字段尚未添加。让我们跳过将结束程序的“保存更改”调用。此时,如果我们检查数据库中的文档,我们会注意到新字段已添加,如下所示!
索引管理
MongoDB EF Core 提供程序建立在现有的 .NET/C# 驱动程序之上。此架构的一个优点是,我们可以重用已为 DbContext 创建的 MongoClient,以利用 MongoDB 开发人员数据平台公开的其他功能。这包括但不限于索引管理、Atlas 搜索和矢量搜索等功能。
