2015-04-13 17 views
5

Tôi cố gắng kết nối với máy chủ và nhận cơ sở dữ liệu. Nó chạy đúng cách nhưng VS2013 cho tôi thấy một cảnh báo:MongoDB nhận máy chủ

Cảnh báo 1 'MongoDB.Driver.MongoClientExtensions.GetServer (MongoDB.Driver.MongoClient)' đã lỗi thời: 'Sử dụng API mới thay thế.

 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"); 

Ai đó có thể giúp tôi giải quyết vấn đề này? Tks để đọc.

Trả lời

11

Lớp MongoServer không được chấp nhận trong phiên bản 2.0.0 (xem here). Bạn có thể gọi GetDatabase() trực tiếp trên đối tượng MongoClient:

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

tài liệu hướng dẫn thêm về cách kết nối đến máy chủ MongoDB, lấy một cơ sở dữ liệu, vv có thể được tìm thấy trong các reference documentation.

+0

Tôi đã thử nó, nhưng khi tôi gọi Getdatabase() từ Client. bookCollection.Save (sách) không hoạt động. Tôi đã cố gắng để chạy bookCollection.InsertOneAsync (sách); Không có gì thay đổi. Bạn có thể giải thích cho tôi không? Giúp đỡ bạn rất nhiều. – Hana

+0

@Hana Rất tiếc, bạn muốn trợ giúp thêm nhưng không có quyền truy cập vào máy tính Windows. –

+0

Sử dụng 'mongoClient.GetDatabase' cho tôi một lỗi có nội dung' "MongoClient không chứa định nghĩa cho GetDatabase" '. Vậy giải pháp thay thế để lấy cơ sở dữ liệu theo tên của nó là gì? – Rai

1

Đoạn mã ví dụ từ @Robby hoạt động, nhưng nó không trả lại những gì mã của bạn được mong đợi; nó trả về các đối tượng Interface. Trình điều khiển C# đã được cập nhật để sử dụng các phương thức Interface, cũng như một số hàm không đồng bộ, vì vậy việc cập nhật mã của bạn có lẽ là một ý tưởng hay.

Cách mới để lấy cơ sở dữ liệu là - tốt, bạn không có cơ sở dữ liệu nữa. Bạn nhận được một IMongoDatabase là một giao diện cho cơ sở dữ liệu. Ngoài ra, bạn không nên làm việc với MongoCollection giây nữa (từ đối tượng MongoDatabase), khi bạn nhận được IMongoDatabase, bạn sẽ làm việc với IMongoCollection. Tái cấu trúc? Bạn đặt cược! Nhưng nó đáng giá.

Tôi cũng khuyên bạn nên đặt cơ sở dữ liệu mặc định của mình trong chuỗi kết nối được định dạng URL Mongo. Bằng cách đó bạn có thể giữ các hằng số được mã hóa cứng, chẳng hạn như tên cơ sở dữ liệu, ngoài mã của bạn.

// 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

tôi đã thay đổi mã của tôi để sau:

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

Điều này giúp ích như thế nào? –

Các vấn đề liên quan