设置域类MongoDB / C#的正确方法是什么?

时间:2014-07-27 13:08:56

标签: c# wpf mongodb

我目前正在制作一个WPF应用程序,现在我已准备好添加一个mongo数据库,但是我似乎无法找到最好的进程来实现这一点。现在我这样做:

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,这在某种程度上是有意义的,问题是,我已经尝试过多种不同的方法来使其可访问,并且它是只是没有工作,这让我相信有更好的方法来解决这个问题。有什么想法吗?

1 个答案:

答案 0 :(得分: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的副本等。您仍然需要花一点时间来探索这些概念可变生命周期,范围....