public void UserExample()
        {
            var interests = new HashSet<string> { "distributed systems", "Erlang" };
            var joe = new User("Joe", "Armstrong", interests);

            var entityManager = new EntityManager(client);
            entityManager.Add(joe);
            var repo = new UserRepository(client);
            repo.Save(joe);

            joe.VisitPage();

            joe.AddInterest("riak");

            repo.UpgradeAccount(joe);

            var joeFetched = repo.Get(joe.ID);

            Assert.GreaterOrEqual(joe.PageVisits, 0);
            Assert.Contains("riak", joeFetched.Interests.ToArray());

            PrintObject(joeFetched);

            repo.DowngradeAccount(joe);

            joeFetched = repo.Get(joe.ID);
            PrintObject(joeFetched);
        }
 private void HandlePropertyChanged(object sender, PropertyChangedEventArgs e)
 {
     var user = sender as User;
     if (user != null)
     {
         var repository = new UserRepository(client);
         if (e.PropertyName == "PageVisits")
         {
             repository.IncrementPageVisits(user);
         }
         else if (e.PropertyName.StartsWith("Interests:"))
         {
             var op = e.PropertyName.Split(EventDataChars);
             Debug.Assert(op[0] == "Interests");
             switch (op[1])
             {
                 case "Added":
                     repository.AddInterest(user, op[2]);
                     break;
                 case "Removed":
                     repository.RemoveInterest(user, op[2]);
                     break;
                 default:
                     throw new InvalidOperationException(
                         string.Format("Unexpected Interests event action: {0}", op[1]));
             }
         }
         else if (e.PropertyName.StartsWith("AccountStatus:"))
         {
             var op = e.PropertyName.Split(EventDataChars);
             Debug.Assert(op[0] == "AccountStatus");
             if (op[1] == TrueStr)
             {
                 repository.UpgradeAccount(user);
             }
             else if (op[1] == FalseStr)
             {
                 repository.DowngradeAccount(user);
             }
             else
             {
                 throw new InvalidOperationException(
                     string.Format("Unexpected AccountStatus event action: {0}", op[1]));
             }
         }
     }
 }