Example #1
0
        void cacheing_for_select_many()
        {
            before = () =>
            {
                user1Id = new { Name = "Jane" }.InsertInto("Users");

                email1Id = new { UserId = user1Id, Address = "*****@*****.**" }.InsertInto("Emails");

                new { EmailId = email1Id, Name = "Alias1" }.InsertInto("Aliases");
            };

            it["maintains cache of select many"] = () =>
            {
                var userCollection = users.All() as dynamic;

                selectMany = userCollection.Emails().Aliases();

                selectMany.Count().should_be(1);

                new { EmailId = email1Id, Name = "Alias2" }.InsertInto("Aliases");

                selectMany = userCollection.Emails().Aliases();

                selectMany.Count().should_be(1);
            };

            it["the parent collection is also cached"] = () =>
            {
                dynamic allEmails = emails.All();

                allEmails.Aliases();

                var firstEmail = allEmails.First();

                new { EmailId = email1Id, Name = "Alias2" }.InsertInto("Aliases");

                ((int)firstEmail.Aliases().Count()).should_be(1);
            };

            it["allows the discarding of cache"] = () =>
            {
                var userCollection = users.All() as dynamic;

                selectMany = userCollection.Emails().Aliases();

                new { EmailId = email1Id, Name = "Alias2" }.InsertInto("Aliases");

                selectMany = userCollection.Emails().Aliases(new { discardCache = true });

                selectMany.Count().should_be(2);
            };
        }
Example #2
0
        public void UnWrap(IContactInfoLocal contactInfo)
        {
            contactInfo.FirstName  = FirstName;
            contactInfo.LastName   = LastName;
            contactInfo.MiddleName = MiddleName;
            contactInfo.Company    = Company;
            contactInfo.JobTitle   = JobTitle;
            contactInfo.Note       = Note;

            // Update phone numbers
            foreach (var item in PhoneNumbers)
            {
                if (string.IsNullOrWhiteSpace(item.Number))
                {
                    continue;
                }

                var target = contactInfo.PhoneNumbers.FirstOrDefault(t => t.Id == item.Id);
                if (target == null || item.Id < 0)
                {
                    target = contactInfo.AddressBook.CreatePhoneNumber();
                    contactInfo.PhoneNumbers.Add(target);
                }

                item.UnWrap(target);
            }
            foreach (var item in contactInfo.PhoneNumbers.Where(x => PhoneNumbers.All(y => x.Id != y.Id) || string.IsNullOrWhiteSpace(x.Number)).ToArray())
            {
                contactInfo.PhoneNumbers.Remove(item);
            }

            // Update emails
            foreach (var item in Emails)
            {
                if (string.IsNullOrWhiteSpace(item.Email))
                {
                    continue;
                }

                var target = contactInfo.Emails.FirstOrDefault(t => t.Id == item.Id);
                if (target == null || item.Id < 0)
                {
                    target = contactInfo.AddressBook.CreateEmail();
                    contactInfo.Emails.Add(target);
                }

                item.UnWrap(target);
            }
            foreach (var item in contactInfo.Emails.Where(x => Emails.All(y => x.Id != y.Id) || string.IsNullOrWhiteSpace(x.Email)).ToArray())
            {
                contactInfo.Emails.Remove(item);
            }

            // Update tags
            foreach (var item in Tags)
            {
                var target = contactInfo.Tags.FirstOrDefault(t => t.Id == item.Id);
                if (target != null)
                {
                    continue;
                }

                target = _contactsManager.Tags.FirstOrDefault(x => x.Id == item.Id);
                if (target != null)
                {
                    contactInfo.Tags.Add(target);
                }
            }
            foreach (var item in contactInfo.Tags.Where(x => Tags.All(y => x.Id != y.Id)).ToArray())
            {
                contactInfo.Tags.Remove(item);
            }
        }