在修改时保存MongoDB数据库对象

时间:2014-07-01 00:32:40

标签: c# mongodb

我有很多我创建的对象,我在我的应用程序中使用全局。我希望在修改它们下的属性时保存它们。

这样的事情会起作用吗?如果我实际设置了Campaign的新值,而不是像Campaign.Name那样访问它下面的内容,那么这不会只保存它吗?

public Campaign Campaign
{
    get { return _campaign; }
    set { SaveCampaign(value); }
}
private static void SaveCampaign(Campaign campaign)
{
    var databaseClient = new MongoClient(TerminusService.DatabaseConnectionString);
    var server = databaseClient.GetServer();
    var database = server.GetDatabase("TerminusDialer");
    var collection = database.GetCollection<Campaign>("campaigns");
    collection.Save(campaign);
}

1 个答案:

答案 0 :(得分:0)

是的,只有在您将新值设置为Campaign且未更改其名称时才会保存。

我有一个建议你可以试试:

  1. 您可以创建一个事件,只要该类中的属性发生更改,就会触发该事件。这是一个简单的例子:Watch it working on .net fiddle

    class ListenToMe
    {
        public event EventHandler OnPropertyChanged;
    
        private string _name;
        public string Name
        {
            get{return _name;}
            set
            {
                if (_name!=value)
                {
                    this._name = value;
                    OnPropertyChanged(this,new EventArgs());
                }
            }
        }
    }
    
    public static void Main()
    {
        ListenToMe someone = new ListenToMe();
        someone.OnPropertyChanged += (o,e) => Console.WriteLine("My new name is: "+ someone.Name); // we will do something whenever props change
        someone.Name = "Mary"; // upon changing it, it appears on Console
        someone.Name = "Lucy";
        someone.Name = "Angelica";
    }
    
  2. 如果你四处寻找接口INotifyPropertyChanged,你会看到很多关于这种方法的信息,它主要用于将UI元素绑定到视图模型(以及其他用途) )。

    您也可以为每个set的每个属性调用一个方法,但是您必须从Campaign调用该方法,这可能是不受欢迎的。这就是为什么在这些环境中发布活动似乎更好。

    注意:另外,作为建议,在做这种事情时要小心。我相信你这样做是为了自动保存&#34;每个步骤的信息,看起来很有趣,但如果您忘记每个属性集都会导致数据库更新副作用,您可能会在某些操作期间向数据库进行大量往返。