public async Task NestedPrefetchWhenChildElementIsNullAsyncTest() { RemoveAllBooks(); using (var session = Domain.OpenSession()) { using (var tx = session.OpenTransaction()) { var book0 = new Model.Book { Title = new Model.Title { Text = "T0" }, Category = "1" }; var book1 = new Model.Book { Category = "2" }; tx.Complete(); } using (var tx = session.OpenTransaction()) { var prefetcher = session.Query.All <Model.Book>() .Prefetch(b => b.Title.Book).AsAsync(); var titleField = Domain.Model.Types[typeof(Model.Book)].Fields["Title"]; var titleType = Domain.Model.Types[typeof(Model.Title)]; foreach (var book in await prefetcher) { var titleKey = book.GetReferenceKey(titleField); if (titleKey != null) { PrefetchTestHelper.AssertOnlyDefaultColumnsAreLoaded(titleKey, titleType, session); } } } } }
public async Task NestedPrefetchWhenRootElementIsNullAsyncTest() { RemoveAllBooks(); using (var session = Domain.OpenSession()) { using (var tx = session.OpenTransaction()) { var book = new Model.Book { Title = new Model.Title { Text = "T0" }, Category = "1" }; tx.Complete(); } using (var tx = session.OpenTransaction()) { var books = session.Query.All <Model.Book>().AsEnumerable().Concat(EnumerableUtils.One <Model.Book>(null)) .Prefetch(b => b.Title.Book).AsAsync(); var titleField = Domain.Model.Types[typeof(Model.Book)].Fields["Title"]; var titleType = Domain.Model.Types[typeof(Model.Title)]; var count = 0; foreach (var book in await books) { count++; if (book != null) { var titleKey = book.GetReferenceKey(titleField); if (titleKey != null) { PrefetchTestHelper.AssertOnlyDefaultColumnsAreLoaded(titleKey, titleType, session); } } } Assert.AreEqual(2, count); } } }
public void NotificationAboutUnknownForeignKeyWhenItsEntityHasBeenLoadedInAnotherTransactionTest() { Key book0Key; Key title0Key; Key book1Key; Key title1Key; using (var session = Domain.OpenSession()) using (var tx = session.OpenTransaction()) { CreateBookAndTitleInExistingSession(out title0Key, out book0Key); CreateBookAndTitleInExistingSession(out title1Key, out book1Key); tx.Complete(); } using (var session = Domain.OpenSession()) { var prefetchManager = (PrefetchManager)PrefetchProcessorField.GetValue(session.Handler); using (var tx = session.OpenTransaction()) { prefetchManager.InvokePrefetch(title0Key, null, new PrefetchFieldDescriptor(title0Key.TypeInfo.Fields["Id"])); prefetchManager.InvokePrefetch(book1Key, null, new PrefetchFieldDescriptor(book1Key.TypeInfo.Fields["Id"])); prefetchManager.InvokePrefetch(title1Key, null, new PrefetchFieldDescriptor(title1Key.TypeInfo.Fields["Id"])); prefetchManager.ExecuteTasks(true); } using (var tx = session.OpenTransaction()) { prefetchManager.InvokePrefetch(book0Key, null, new PrefetchFieldDescriptor(BookTitleField, null, true, true, (ownerKey, field, key) => Assert.Fail())); prefetchManager.InvokePrefetch(book1Key, null, new PrefetchFieldDescriptor(BookTitleField, null, true, true, (ownerKey, field, key) => Assert.Fail())); prefetchManager.ExecuteTasks(true); PrefetchTestHelper.AssertOnlyDefaultColumnsAreLoaded(title0Key, ITitleType, session); } } }
public async Task StructureFieldsPrefetchAsyncTest() { Key containerKey; Key bookShop0Key; Key book0Key; Key bookShop1Key; Key book1Key; PrefetchTestHelper.CreateOfferContainer(Domain, out containerKey, out book0Key, out bookShop0Key, out book1Key, out bookShop1Key); using (var session = Domain.OpenSession()) using (var tx = session.OpenTransaction()) { var containers = session.Query.Many <Model.OfferContainer>(EnumerableUtils.One(containerKey)) .Prefetch(oc => oc.RealOffer.Book) .Prefetch(oc => oc.IntermediateOffer.RealOffer.BookShop).AsAsync(); foreach (var key in await containers) { PrefetchTestHelper.AssertOnlyDefaultColumnsAreLoaded(book0Key, book0Key.TypeInfo, session); PrefetchTestHelper.AssertOnlyDefaultColumnsAreLoaded(bookShop1Key, bookShop1Key.TypeInfo, session); } } }