我正在尝试使用实体框架和 MongoDB。
这是我的docker compose:
services:
mongo-db:
container_name: mongo-db
image: mongo
restart: always
ports:
- "27017:27017"
实体和上下文:
public class Order
{
public string Id { get; set; }
public string Name { get; set; }
}
public class OrdersDbContext(DbContextOptions options) : DbContext(options)
{
public DbSet<Order> Orders { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Order>().ToCollection("orders");
}
}
这就是我尝试使用它的方式:
var order = new Order
{
Id = Helpers.GetNewId(),
Name = "Some order"
};
var mongoClient = new MongoClient("mongodb://localhost:27017");
var dbContextOptions =
new DbContextOptionsBuilder<OrdersDbContext>().UseMongoDB(mongoClient, "orders");
var ordersDb = new OrdersDbContext(dbContextOptions.Options);
ordersDb.Orders.Add(order);
ordersDb.SaveChanges();
调用时SaveChanges
,我收到此错误:
未处理的异常。MongoDB.Driver.MongoIncompatibleDriverException:localhost:27017 上的服务器报告线路版本 4,但此版本的驱动程序至少需要 7(MongoDB 4.0.0)。
在 MongoDB.Driver.MongoIncompatibleDriverException.ThrowIfNotSupported(ClusterDescription 描述)
在 MongoDB.Driver.Core.Clusters.Cluster.SelectServerHelper.SelectServer()
在 MongoDB.Driver.Core.Clusters.Cluster.SelectServer(IServerSelector 选择器,CancellationToken cancellationToken)
在 MongoDB.Driver.Core.Clusters.IClusterExtensions.SelectServerAndPinIfNeeded(IClusterInternal 集群,ICoreSessionHandle 会话,IServerSelector 选择器,IReadOnlyCollection1 deprioritizedServers, CancellationToken cancellationToken) at MongoDB.Driver.Core.Bindings.WritableServerBinding.GetWriteChannelSource(IReadOnlyCollection
1 deprioritizedServers,CancellationToken cancellationToken)
在 MongoDB.Driver.Core.Bindings.WritableServerBinding.GetWriteChannelSource(CancellationToken cancellationToken) 在 MongoDB.Driver.Core.Bindings.ReadWriteBindingHandle.GetWriteChannelSource(CancellationToken cancellationToken)
这对我来说毫无意义,因为容器中实际的 mongodb 版本是 8.0.3。有什么办法可以修复它吗?
最有可能的是,你错了,错误信息说你的服务器是 3.2,太旧了。如果你从 shell(如 mongosh)运行 buildInfo 命令,你就会看到它:(见此处)