Example #1
0
        public async Task ShouldAutoFlushAsync()
        {
            using (var session = OpenSession())
                using (session.BeginTransaction())
                {
                    var e1 = new NeverItem {
                        Name = "Abatay"
                    };
                    e1.Childrens.Add(new NeverChildItem()
                    {
                        Name   = "Child",
                        Parent = e1
                    });
                    await(session.SaveAsync(e1));

                    var result = await((from e in session.Query <NeverItem>()
                                        where e.Name == "Abatay"
                                        select e).ToListAsync());

                    Assert.That(result.Count, Is.EqualTo(1));
                }
        }
Example #2
0
        public async Task NeverInvalidateEntitiesAsync()
        {
            var debugSessionFactory = (DebugSessionFactory)Sfi;

            var cache = Substitute.For <UpdateTimestampsCache>(Sfi.Settings, new Dictionary <string, string>());

            var updateTimestampsCacheField = typeof(SessionFactoryImpl).GetField(
                "updateTimestampsCache",
                BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);

            updateTimestampsCacheField.SetValue(debugSessionFactory.ActualFactory, cache);

            //"Received" assertions can not be used since the collection is reused and cleared between calls.
            //The received args are cloned and stored
            var preInvalidations = new List <IReadOnlyCollection <string> >();
            var invalidations    = new List <IReadOnlyCollection <string> >();

            await(cache.PreInvalidateAsync(Arg.Do <IReadOnlyCollection <string> >(x => preInvalidations.Add(x.ToList())), CancellationToken.None));
            await(cache.InvalidateAsync(Arg.Do <IReadOnlyCollection <string> >(x => invalidations.Add(x.ToList())), CancellationToken.None));

            using (var session = OpenSession())
            {
                List <int> ids = new List <int>();
                //Add NeverItem
                using (var tx = session.BeginTransaction())
                {
                    foreach (var i in Enumerable.Range(1, 10))
                    {
                        var item = new NeverItem {
                            Name = "Abatay"
                        };
                        item.Childrens.Add(new NeverChildItem()
                        {
                            Name   = "Child",
                            Parent = item
                        });
                        await(session.SaveAsync(item));
                        ids.Add(item.Id);
                    }

                    await(tx.CommitAsync());
                }

                //Update NeverItem
                using (var tx = session.BeginTransaction())
                {
                    foreach (var i in ids)
                    {
                        var item = await(session.GetAsync <NeverItem>(i));
                        item.Name = item.Id.ToString();
                    }

                    await(tx.CommitAsync());
                }

                //Delete NeverItem
                using (var tx = session.BeginTransaction())
                {
                    foreach (var i in ids)
                    {
                        var item = await(session.GetAsync <NeverItem>(i));
                        await(session.DeleteAsync(item));
                    }

                    await(tx.CommitAsync());
                }

                //Update NeverItem using HQL
                using (var tx = session.BeginTransaction())
                {
                    await(session.CreateQuery("UPDATE NeverItem SET Name='Test'").ExecuteUpdateAsync());

                    await(tx.CommitAsync());
                }

                //Update NeverItem using LINQ
                using (var tx = session.BeginTransaction())
                {
                    await(session.Query <NeverItem>()
                          .UpdateBuilder()
                          .Set(x => x.Name, "Test")
                          .UpdateAsync());

                    await(tx.CommitAsync());
                }
            }

            //Should receive none preinvalidation when Cache is configured as never
            Assert.That(preInvalidations, Has.Count.EqualTo(0));

            //Should receive none invalidation when Cache is configured as never
            Assert.That(invalidations, Has.Count.EqualTo(0));
        }