Docs 菜单
Docs 主页
/ / /
EF Core 提供程序
/

将数据写入 MongoDB

在此页面上

  • Overview
  • 事务性写操作
  • Insert
  • 插入一个实体
  • 插入多个实体
  • Update
  • 删除
  • 删除一个实体
  • 删除多个实体
  • 更多信息

Entity Framework Core 允许您在不显式运行数据库命令的情况下处理应用程序中的数据。 您可以在应用程序中插入、更新或删除数据,并使用 SaveChanges()SaveChangesAsync()方法将这些更改保留到MongoDB 。

当您调用SaveChanges()SaveChangesAsync()方法时,EF Core 提供程序会自动检测对数据所做的任何更改,并使用MongoDB查询API运行必要的命令以更新数据库。

在本指南中,您可以查看如何在配置为使用 EF Core 提供程序的应用程序上执行常见写入操作的示例。

提示

要学习;了解如何配置应用程序以使用 EF Core 提供程序,请参阅配置 EF Core 提供程序。

默认, SaveChanges()SaveChangesAsync()方法是事务性的。 这意味着,如果在操作过程中发生错误,提供商将回滚对数据库所做的任何更改。 因此,您的应用程序必须连接到MongoDB 服务器的支持事务的部署,例如副本集。

您可以在应用程序设置期间将DbContext子类上的AutoTransactionBehavior属性设置为AutoTransaction.Never ,从而在SaveChanges()SaveChangesAsync()方法中禁用自动事务。 但是,我们不建议禁用此功能。 这样做会导致保存操作期间的任何并发更改或操作失败,从而使数据库处于不一致状态。

以下示例展示了如何在SaveChanges()SaveChangesAsync()方法中禁用自动事务:

dbContext.Database.AutoTransactionBehavior = AutoTransactionBehavior.Never;

警告

禁用自动事务可能会导致数据不一致。 我们建议您不要禁用此功能。

您可以使用Add()方法将单个实体插入集合中,也可以使用AddRange()方法一次插入多个实体。

Add()方法接受与您在正在修改的DbSet实例上指定类型相同的单个实体。

以下代码使用Add() 方法将新的Planet 对象添加到名为DbSetPlanets 中。然后,它调用SaveChanges()方法将该实体插入到 MongoDB collection中。

db.Planets.Add(new Planet()
{
name = "Pluto",
hasRings = false,
orderFromSun = 9
});
db.SaveChanges();

AddRange()方法接受要添加到DbSet的实体数组。

以下代码使用AddRange() 方法将Planet 对象数组添加到名为DbSetPlanets 中。然后,它调用SaveChanges()方法将这些实体插入 MongoDB collection。

var planets = new[]
{
new Planet()
{
_id = ObjectId.GenerateNewId(),
name = "Pluto",
hasRings = false,
orderFromSun = 9
},
new Planet()
{
_id = ObjectId.GenerateNewId(),
name = "Scadrial",
hasRings = false,
orderFromSun = 10
}
};
db.Planets.AddRange(planets);
db.SaveChanges();

要更新实体,请先检索要更新的实体。 然后对该实体进行更改。 提供商跟踪对实体所做的任何更改,例如设置属性或在具有列表值的字段中添加和删除项目。 要将更新保存到MongoDB,请调用SaveChanges()方法。 EF Core 提供程序将更新后的实体与更改前实体的快照进行比较,并使用MongoDB查询API自动更新集合。

以下代码检索一个name值为"Mercury"的实体,然后更新name字段。 然后,代码调用SaveChanges()方法将该更改保留到collection中。

var planet = db.Planets.FirstOrDefault(p => p.name == "Mercury");
planet.name = "Mercury the first planet";
db.SaveChanges();

您可以使用Remove()方法从集合中删除单个实体,也可以使用RemoveRange()方法一次删除多个实体。

Remove()方法接受与您在正在修改的DbSet实例上指定类型相同的单个实体。

以下代码删除一个name值为"Pluto"Planet实体。 然后,它调用SaveChanges()方法从 MongoDB collection 中删除该实体。

var planet = db.Planets.FirstOrDefault(p => p.name == "Pluto");
db.Planets.Remove(planet);
db.SaveChanges();

RemoveRange()方法接受要从DbSet中删除的实体数组。

以下代码查找两个Planet实体并将它们添加到数组中。 然后,它使用RemoveRange()方法从DbSet中删除这两个实体。 最后,它使用SaveChanges()方法从 MongoDB collection 中删除这些实体。

var pluto = db.Planets.FirstOrDefault(p => p.name == "Pluto");
var scadrial = db.Planets.FirstOrDefault(p => p.name == "Scadrial");
var planets = new[] { pluto, scadrial };
db.Planets.RemoveRange(planets);
db.SaveChanges();

要进一步了解本指南中讨论的方法,请参阅以下 .NET API 文档链接:

  • SaveChanges()

  • Add()

  • AddRange()

  • Remove()

  • RemoveRange()

后退

查询数据