The MongoDB EF Core Provider requires Entity Framework Core 8 on .NET 8 or later and a MongoDB database server 5.0 or later, preferably in a transaction-enabled configuration.
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"));
db.Database.EnsureCreated();
Entity Framework Core and MongoDB have a wide variety of features. This provider supports a subset of the functionality available in both, specifically:
Where
, Find
, First
, Single
, OrderBy
, ThenBy
, Skip
, Take
etc.Any
, Count
, LongCount
[Column]
or [BsonElement]
attributes or HasElementName("name")
method[Table("name")]
attribute or ToCollection("name")
methodGuid
and ObjectId
int
, string
, Guid
, decimal
, etc.) & MongoDB types (ObjectId
, Decimal128
)Dictionary<string, ...>
typeBsonIgnore
, BsonId
, BsonDateTimeOptions
, BsonElement
, BsonRepresentation
and BsonRequired
supportHasConversion
DateTime
EnsureCreated
& EnsureDeleted
operationsIsConcurrencyToken
/ConcurrencyCheckAttribute
& IsRowVersion
/TimestampAttribute
SaveChanges
& SaveChangesAsync
- all changes committed or rolled-back togetherCamcelCaseElementNameConvention
for helping map Pascal-cased C# properties to came-cased BSON elementsA 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.
This project's version-numbers are aligned with Entity Framework Core and as-such we can not use the semver convention of constraining breaking changes solely to major version numbers. Please keep an eye on our Breaking Changes document before upgrading to a new version of this provider.
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.
Thank you to everyone who has contributed to this project.