Gravar dados no MongoDB
Nesta página
Visão geral
O Entity Framework Core permite que você trabalhe com dados em seu aplicação sem executar os comandos do banco de dados de dados explicitamente. Você pode inserir, atualizar ou excluir dados em seu aplicação e persistir essas alterações no MongoDB usando o método SaveChanges()
ou SaveChangesAsync()
.
Quando você chama o método SaveChanges()
ou SaveChangesAsync()
, o EF Core Provider detecta automaticamente quaisquer alterações feitas em seus dados e executa os comandos necessários para atualizar o banco de dados de dados usando a MongoDB Query API.
Neste guia, você pode ver exemplos de como executar operações de gravação comuns em um aplicação configurado para usar o EF Core Provider.
Dica
Para saber como configurar um aplicação para usar o fornecedor do EF Core, consulte Configurar o fornecedor do EF Core.
Operações de gravação transacional
Os métodos SaveChanges()
e SaveChangesAsync()
são transacionais por padrão. Isso significa que, se ocorrer um erro durante uma operação, o fornecedor reverterá todas as alterações feitas no banco de banco de dados. Por esse motivo, seu aplicação deve estar conectado a um sistema compatível com transações do servidor MongoDB , como um conjunto de réplicas.
Você pode desativar as transações automáticas nos métodos SaveChanges()
e SaveChangesAsync()
definindo a propriedade AutoTransactionBehavior
como AutoTransaction.Never
na sua subclasse DbContext
durante a configuração do aplicação . No entanto, não recomendamos desativar esse recurso. Isso faz com que quaisquer alterações de simultaneidade ou falhas de operação durante a operação de salvamento deixem o banco de dados de dados em um estado inconsistente.
O exemplo a seguir mostra como desabilitar transações automáticas nos métodos SaveChanges()
e SaveChangesAsync()
:
dbContext.Database.AutoTransactionBehavior = AutoTransactionBehavior.Never;
Aviso
A desativação de transações automáticas pode causar inconsistências de dados. Recomendamos que você não desative esse recurso.
Insert
Você pode usar o método Add()
para inserir uma única entidade em sua collection ou pode usar o método AddRange()
para inserir várias entidades de uma só vez.
Inserir uma entidade
O método Add()
aceita uma única entidade do mesmo tipo que você especificou na instância do DbSet
que você está modificando.
O código a seguir usa o método Add()
para adicionar um novo objeto Planet
ao DbSet
chamado Planets
. Em seguida, ele chama o método SaveChanges()
para inserir essa entidade na MongoDB collection.
db.Planets.Add(new Planet() { name = "Pluto", hasRings = false, orderFromSun = 9 }); db.SaveChanges();
Inserir várias entidades
O método AddRange()
aceita uma array de entidades que você deseja adicionar ao DbSet
.
O código a seguir usa o método AddRange()
para adicionar uma array de objetos Planet
ao DbSet
chamado Planets
. Em seguida, ele chama o método SaveChanges()
para inserir essas entidades na collection MongoDB.
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();
Update
Para atualizar uma entidade, primeiro recupere a entidade que você deseja atualizar. Em seguida, faça as alterações nessa entidade. O fornecedor acompanha todas as alterações feitas na entidade, como definir propriedades ou adicionar e remover itens de campos com valores de lista. Para salvar a atualização para MongoDB, chame o método SaveChanges()
. O EF Core Provider compara a entidade atualizada com um snapshot da entidade antes da alteração e atualiza automaticamente a coleção usando a MongoDB Query API.
O código a seguir recupera uma entidade na qual o valor name
é "Mercury"
e, em seguida, atualiza o campo name
. Em seguida, o código chama o método SaveChanges()
para persistir essa alteração na collection.
var planet = db.Planets.FirstOrDefault(p => p.name == "Mercury"); planet.name = "Mercury the first planet"; db.SaveChanges();
Excluir
Você pode utilizar o método Remove()
para excluir uma única entidade da sua coleção ou o método RemoveRange()
para excluir várias entidades de uma só vez.
Excluir uma entidade
O método Remove()
aceita uma única entidade do mesmo tipo que você especificou na instância do DbSet
que você está modificando.
O código a seguir remove uma entidade Planet
na qual o valor name
é "Pluto"
. Em seguida, ele chama o método SaveChanges()
para excluir essa entidade da MongoDB collection.
var planet = db.Planets.FirstOrDefault(p => p.name == "Pluto"); db.Planets.Remove(planet); db.SaveChanges();
Excluir várias entidades
O método RemoveRange()
aceita uma array de entidades para remover do DbSet
.
O código a seguir localiza duas entidades Planet
e as adiciona a uma array. Em seguida, ele usa o método RemoveRange()
para remover ambas as entidades do DbSet
. Finalmente, ele usa o método SaveChanges()
para remover essas entidades da coleção do MongoDB.
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();
Informações adicionais
Para saber mais sobre os métodos discutidos nesta guia, consulte os seguintes links de documentação da API .NET: