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); }; }
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); } }