The MongoDB EF Core Provider requires Entity Framework Core 8 on .NET 8 or later.
Setup a DbContext with your desired entities and configuration
internal class PlanetDbContext : DbContext
{
public DbSet<Planet> Planets { get; init; }
public static PlanetDbContext Create(IMongoDatabase database) =>
new(new DbContextOptionsBuilder<PlanetDbContext>()
.UseMongoDB(database.Client, database.DatabaseNamespace.DatabaseName)
.Options);
public PlanetDbContext(DbContextOptions options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Planet>().ToCollection("planets");
}
}
To get going with the DbContext:
var mongoConnectionString = Environment.GetEnvironmentVariable("MONGODB_URI");
var mongoClient = new MongoClient(mongoConnectionString);
var db = PlanetDbContext.Create(mongoClient.GetDatabase("planets"));
Entity Framework Core and MongoDB have a wide variety of features. This provider supports a subset of the functionality available in both, specifically:
- Querying with Where, Find, First, Single, OrderBy, ThenBy, Skip, Take etc.
- Top-level aggregates of Any, Count, LongCount
- Mapping properties to BSON elements using
[Column]
or[BsonElement]
attributes orHasElementName("name")
method - Mapping entities to collections using
[Table("name")]
attribute orToCollection("name")
method - Single or composite keys of standard types including string, Guid and ObjectId
- Properties with typical CLR types (int, string, Guid, decimal), Mongo types (ObjectId, Decimal128)
- Properties containing arrays and lists of simple CLR types
- Owned entities (aka value types, sub-documents, embedded documents) both directly and within collections
- BsonIgnore, BsonId, BsonDateTimeOptions, BsonElement and BsonRequired support
- Value converters using
HasConversion
- Query and update logging including MQL (sensitive mode only)
- Some mapping configuration options for DateTime
A number of Entity Framework Core features are not currently supported but planned for future release. If you require use of these facilities in the mean-time consider using the existing MongoDB C# Driver's LINQ provider which supports them.
They are:
- Select projections
- Sum, Average, Min, Max etc.
- Transactions
- Type discriminators
- Additional mapping configuration options
- ExecuteUpdate & ExecuteDelete
- Properties of Dictionary type
- Binary/byte array properties
- Additional CLR types (DateOnly, TimeOnly etc).
- EF shadow properties
- GroupBy operations
- Relationships between entities
- Includes/joins
- Foreign keys and navigation traversal
- Keyless entity types
- Schema migrations
- Database-first & model-first
- Alternate keys
- Document (table) splitting
- Temporal tables
- Spacial data
- Timeseries
- Atlas search
If you’ve identified a security vulnerability in a driver or any other MongoDB project, please report it according to the instructions here.
Please see our guidelines for contributing to the driver.
- Damien Guard damien.guard@mongodb.com
- Oleksandr Poliakov oleksandr.poliakov@mongodb.com
- Robert Stam robert@mongodb.com