2014-07-27 62 views
0

我目前正在製作一個WPF應用程序,現在準備添加一個mongo數據庫,但是我似乎無法找到最好的過程來做到這一點。現在我喜歡這樣做:什麼是設置域類MongoDB/C的正確方式#

MongoManagment.cs:

namespace MoneyManagment 
{ 
    class MongoManagment 
    { 
     public void Connect() 
     { 
      String connectionString = "mongodb://localhost"; 
      MongoClient client = new MongoClient(connectionString); 
      MongoServer server = client.GetServer(); 
      MongoDatabase database = server.GetDatabase("MoneyManagment"); //Connect to the database 
      MongoCollection<Users> _users = database.GetCollection<Users>("user"); // "user" is the collection name, "Users" is the domain class 

     } 
    } 

    public class Users 
    { 
     public ObjectId _id { get; set; } 
     public string username { get; set; } 
    } 
} 

然後我嘗試從域類訪問MainWindow.xaml.cs數據:

namespace MoneyManagment 
{ 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
      foreach (Users user in _users.FindAll()) 
      { 
       //do something with users data here 
      } 
     } 
    } 

而且我在這裏得到一個錯誤,VS不能訪問_users,這在一定程度上是合理的,但問題是,我嘗試了很多不同的方法來使其可訪問,它只是不工作,這導致我相信有一個更好的方式去做這件事。有任何想法嗎?

+0

你究竟在哪裏實例化了_users變量?通常以_開頭的變量表示它是私有的,整個應用程序棧無法訪問?無論哪種方式,您示例中的MainWindow類都不包含對變量的任何引用。 – Claies

+0

@AndrewCounts沒錯。我嘗試過不同的方法來引用它,而且沒有任何工作方式,那麼是否有更好的方法可以解決這個問題呢?它通常如何完成?即時通訊新的C#和mongo ... – Halter

+0

你的聲明在C#術語中根本沒有意義。你所展示的是'_users'變量,它在'MongoManagement'類的'Connect'函數的Scope中聲明,但試圖從一個完全不同的Class中訪問它。閱讀http://msdn.microsoft.com/en-us/library/ms973875.aspx,瞭解變量和範圍(舊文章,主要是VB,但概念是有效的)。 – Claies

回答

2

首先,您需要您想訪問的變量是公開可見的。

public class MongoManagment 
{ 
    public MongoCollection<Users> MongoUsers {get; set;} 

    public void Connect() 
    { 
     .... 
     this.MongoUsers = database.GetCollection<Users>("user"); 
    } 

然後,你需要引用的對象在外部類:

public MainWindow() 
    { 
     .... 
     MongoManagement mm = new MongoManagement(); 
     mm.Connect(); 
     foreach (Users user in mm.MongoUsers.FindAll()) 
     { 
      //do something with users data here 
     } 

這是一個非常簡單的例子,你可能不希望的MongoManagment副本每一個窗口,等等。你仍然想花一點時間去探索變量生命週期的概念,範圍......

相關問題