MongoDB MongoClient.GetServer() 已弃用。什么是新 API?

Ear*_*lee 3 c# mongodb

这是我到我的数据库的连接字符串:

private static string ConnectionString = "mongodb://user:password@server:port/";
private static string AuthSource = "?authSource=location";

public static MongoCollection<ItemEntity> GetMyItemCollectionDB = new MongoClient(ConnectionString + DBName + AuthSource)
.GetServer().GetDatabase(DBName).GetCollection<ItemEntity>(CollectionName);
Run Code Online (Sandbox Code Playgroud)

我听说你可以放弃这个getserver方法:

public static MongoCollection<ItemEntity> GetMyItemCollectionDB = new MongoClient(ConnectionString + DBName + AuthSource)
  .GetDatabase(DBName)
  .GetCollection<ItemEntity>(CollectionName) as MongoCollection<ItemEntity>;
Run Code Online (Sandbox Code Playgroud)

但是为此,我收到了“空对象”错误。有什么问题?

编辑:如果使用新 API 不是那么重要,那么告诉我。

Juj*_*hen 5

为了得到MongoServer实例,我反编译了MongoDB.Driver.dll程序集,GetServer函数是

[Obsolete("Use the new API instead.")]
public static MongoServer GetServer(this MongoClient client)
{
    return 
MongoServer.Create(MongoServerSettings.FromClientSettings(client.Settings));
} 
Run Code Online (Sandbox Code Playgroud)

所以你可以尝试以下代码

MongoClient client = new MongoClient(ConnectionString + DBName + AuthSource);
MongoServer server =  new MongoServer(MongoServerSettings.FromClientSettings(client.Settings));
var yourCollection = server.GetDatabase(DBName).GetCollection<ItemEntity>(CollectionName);
Run Code Online (Sandbox Code Playgroud)

2.0.0+版本有4种方式

MongoDB.Driver.MongoServer.Create(MongoServerSettings)
MongoDB.Driver.MongoServer.WithReadConcern(ReadConcern)
MongoDB.Driver.MongoServer.WithReadPreference(ReadPreference)
MongoDB.Driver.MongoServer.WithWriteConcern(WriteConcern)
Run Code Online (Sandbox Code Playgroud)