2015-04-13 3 views
5

Provo a connettermi al server e ottenere il database. E 'gestito correttamente, ma mi VS2013 mostrare un avvertimento:MongoDB get server

Attenzione 1 'MongoDB.Driver.MongoClientExtensions.GetServer (MongoDB.Driver.MongoClient)' è obsoleta: 'Utilizzare la nuova API, invece.

 string connectionString = "mongodb://localhost:27017"; 
     MongoClientSettings settings = MongoClientSettings.FromUrl(new MongoUrl(connectionString)); 
     MongoClient mongoClient = new MongoClient(settings); 
     var server = mongoClient.GetServer(); 
     var db = server.GetDatabase("bookstore"); 
     var bookCollection = db.GetCollection<Book>("Book"); 

Qualcuno può aiutarmi a risolvere questo? TKS per la lettura.

risposta

11

La classe MongoServer era obsoleta nella versione 2.0.0 (vedere here). È possibile chiamare GetDatabase() direttamente sull'oggetto MongoClient:

MongoClient mongoClient = new MongoClient(settings); 
var db = mongoClient.GetDatabase("bookstore"); 

Maggiore documentazione sulla connessione al server MongoDB, il recupero di un database, ecc può essere trovato nel reference documentation.

+0

ho provato, ma quando chiamo getDatabase() dal client. bookCollection.Save (libro) non ha funzionato. Ho provato a eseguire bookCollection.InsertOneAsync (libro); Niente è cambiato. Puoi spiegarmi? Tks per il tuo aiuto così tanto. – Hana

+0

@Hana Scusa, vorrei dare una mano in più, ma non ho accesso a un computer Windows. –

+0

L'uso di 'mongoClient.GetDatabase' mi dà un errore che dice' "MongoClient non contiene una definizione per GetDatabase" '. Quindi qual è la soluzione alternativa per ottenere il database con il suo nome? – Rai

1

Il codice di esempio di @Robby funziona, ma non restituisce ciò che il codice è in attesa; restituisce oggetti di interfaccia. Il driver C# è stato aggiornato per utilizzare i metodi Interface e un certo numero di funzioni asincrone, pertanto l'aggiornamento del codice è probabilmente una buona idea.

Il nuovo modo di ottenere un database è - beh, non si ottiene più un database. Ottiene un IMongoDatabase che è un'interfaccia al database. Inoltre, non dovresti più lavorare con MongoDatabase s (dall'oggetto), quando avrai un IMongoDatabase lavorerai con un IMongoCollection. Refactoring? Scommetti! Ma ne vale la pena.

Si consiglia inoltre di inserire il database predefinito nelle stringhe di connessione in formato Mongo. In questo modo puoi mantenere costanti codificate, come il nome del database, fuori dal tuo codice.

// Get your connection string -- use the URL format as in example below: 
// name="MongoConnectionStr" connectionString="mongodb://localhost/bookstore" 
var connectionString = ConfigurationManager.ConnectionStrings["MongoConnectionStr"].ConnectionString; 
var mongoUrl = MongoUrl.Create(connectionString); 

var client = new MongoClient(connectionString); 

// Use the Mongo URL to avoid hard-coding the database name. 
var db = new MongoClient(mongoUrl).GetDatabase(mongoUrl.DatabaseName); 
// books below is an IMongoCollection 
var books = db.GetCollection<Book>("Books"); 
0

ho cambiato il mio codice al seguente:

var mongoUrl = new MongoUrl(connectionString); 
var mongoClient = new MongoClient(mongoUrl); 
MongoServer server = new MongoServer(MongoServerSettings.FromClientSettings(mongoClient.Settings)); 
+0

Come aiuta? –