Neste guia, você aprenderá como configurar um aplicativo para usar o provedor do MongoDB Entity Framework Core. Para saber como configurar um novo projeto e instalar o EF Core Provider, consulte o Comece a usar o EF Core Provider.
Crie um POCO
Crie um objeto CLR/Classe antigo simples, ou POCO, para usar como modelo para sua entidade. Um POCO é um objeto de classe simples que não herda recursos de nenhuma classe de base ou interface específica da framework.
O seguinte exemplo de código mostra como criar um POCO que representa um cliente:
public class Customer { public ObjectId Id { get; set; } public string Name { get; set; } = null!; public string Order { get; set; } = null!; }
Dica
Para saber mais sobre POCOs, consulte o guia POCO na documentação do driver .NET/C#.
Crie uma classe de contexto de banco de dados
To begin using Entity Framework Core, create a context class that derives from DBContext. The DbContext derived class instance represents a database session and is used to query and save instances of your entities.
A classe DBContext expõe propriedades do DBSet que especificam as entidades com as quais você pode interagir ao utilizar este contexto.
O exemplo seguinte cria uma instância de uma classe derivada do DBContext e especifica o objeto Customer como uma propriedade DBSet :
public class MyDbContext : DbContext { public DbSet<Customer> Customers { get; init; } = null!; public MyDbContext(DbContextOptions options) : base(options) { } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity<Customer>().ToCollection("customers"); } }
O exemplo de código anterior substitui o método OnModelCreating() . Substituir o método OnModelCreating() permite a você especificar detalhes de configuração para seu modelo e suas propriedades. Este exemplo utiliza o método ToCollection() para especificar que as entidades do Customer na sua aplicação mapeiam para a collection do customers no MongoDB.
Usar MongoDB
Após criar uma classe DBContext , construa um objeto DbContextOptionsBuilder e chame seu método UseMongoDB() . Este método utiliza dois parâmetros: uma instância do MongoClient e o nome do reconhecimento de data center que armazena as collection com as quais você está trabalhando.
O método UseMongoDB() retorna um objeto DbContextOptions . Passe a propriedade Options deste objeto para o construtor de sua classe DBContext .
O exemplo a seguir mostra como construir um objeto DBContext desta forma:
var mongoClient = new MongoClient("<connection string>"); var dbContextOptions = new DbContextOptionsBuilder<MyDbContext>().UseMongoDB(mongoClient, "<database name>"); var db = new MyDbContext(dbContextOptions.Options);
Dica
Criando um MongoClient
Você pode chamar métodos do MongoDB .NET/C# Driver ao usar o EF Core Provider. O exemplo anterior usa o método MongoClient() do driver .NET /C# para criar um cliente MongoDB que se conecta a uma instância do MongoDB .
Para saber mais sobre como usar o driver .NET/C# do MongoDB para se conectar ao MongoDB, consulte o guia de conexão na documentação do driver .NET/C#.
MongoClient e DbContext Lifetimes
A vida útil e a configuração dos seus objetos MongoClient e DbContext afetam diretamente o uso da memória e a eficiência do pool de conexões.
Register MongoClient as a singleton and share a single instance across all DbContext registrations. Because each MongoClient object manages its own internal connection pool, creating a separate instance for each DbContext scope wastes connections and increases latency. To learn more, see Manage MongoClient Disposables in the .NET/C# Driver documentation.
Register DbContext as a scoped service so that each request uses a new change tracker. A singleton DbContext accumulates tracked entity state across all requests, which causes stale data, memory growth, and increasingly slow change-detection as the tracker grows larger. To learn more, see DbContext in Dependency Injection for ASP.NET Core in the Microsoft Entity Framework Core documentation.
Exemplo
O seguinte exemplo de código mostra como registrar serviços usando injeção de dependência, configurar o provedor EF Core e inserir um documento no banco de dados:
var serviceCollection = new ServiceCollection(); serviceCollection.AddSingleton<IMongoClient>( new MongoClient("<connection string>")); serviceCollection.AddDbContext<MyDbContext>((serviceProvider, options) => { var mongoClient = serviceProvider.GetRequiredService<IMongoClient>(); options.UseMongoDB(mongoClient, "<database name>"); }); using var app = serviceCollection.BuildServiceProvider(); using (var scope = app.CreateScope()) { var db = scope.ServiceProvider.GetRequiredService<MyDbContext>(); // Add a new customer and save it to the database db.Customers.Add(new Customer() { Name = "John Doe", Order = "1 Green Tea" }); db.SaveChanges(); }