Esempio n. 1
0
        public async Task NullableEntityProjectionAsync()
        {
            using (var session = OpenSession())
                using (session.BeginTransaction())
                {
                    var nullableOwner1 = new NullableOwner {
                        Name = "1", ManyToOne = await(session.LoadAsync <OneToOneEntity>(Guid.NewGuid()))
                    };
                    var nullableOwner2 = new NullableOwner {
                        Name = "2"
                    };
                    await(session.SaveAsync(nullableOwner1));
                    await(session.SaveAsync(nullableOwner2));

                    var fullList = await(session.Query <NullableOwner>().Select(x => new { x.Name, ManyToOneId = (Guid?)x.ManyToOne.Id }).ToListAsync());
                    var withValidManyToOneList      = await(session.Query <NullableOwner>().Where(x => x.ManyToOne != null).Select(x => new { x.Name, ManyToOneId = (Guid?)x.ManyToOne.Id }).ToListAsync());
                    var withValidManyToOneList2     = await(session.CreateQuery("from NullableOwner ex where not ex.ManyToOne is null").ListAsync <NullableOwner>());
                    var withNullManyToOneList       = await(session.Query <NullableOwner>().Where(x => x.ManyToOne == null).ToListAsync());
                    var withNullManyToOneJoinedList =
                        await((from x in session.Query <NullableOwner>()
                               from x2 in session.Query <NullableOwner>()
                               where x == x2 && x.ManyToOne == null && x.OneToOne.Name == null
                               select x2).ToListAsync());
                    Assert.That(fullList.Count, Is.EqualTo(2));
                    Assert.That(withValidManyToOneList.Count, Is.EqualTo(0));
                    Assert.That(withValidManyToOneList2.Count, Is.EqualTo(0));
                    Assert.That(withNullManyToOneList.Count, Is.EqualTo(2));
                    Assert.That(withNullManyToOneJoinedList.Count, Is.EqualTo(2));
                }
        }
        public void NullableEntityProjection()
        {
            using (var session = OpenSession())
                using (session.BeginTransaction())
                {
                    var nullableOwner1 = new NullableOwner {
                        Name = "1", ManyToOne = session.Load <OneToOneEntity>(Guid.NewGuid())
                    };
                    var nullableOwner2 = new NullableOwner {
                        Name = "2"
                    };
                    session.Save(nullableOwner1);
                    session.Save(nullableOwner2);

                    var fullList = session.Query <NullableOwner>().Select(x => new { x.Name, ManyToOneId = (Guid?)x.ManyToOne.Id }).ToList();
                    var withValidManyToOneList      = session.Query <NullableOwner>().Where(x => x.ManyToOne != null).Select(x => new { x.Name, ManyToOneId = (Guid?)x.ManyToOne.Id }).ToList();
                    var withValidManyToOneList2     = session.CreateQuery("from NullableOwner ex where not ex.ManyToOne is null").List <NullableOwner>();
                    var withNullManyToOneList       = session.Query <NullableOwner>().Where(x => x.ManyToOne == null).ToList();
                    var withNullManyToOneJoinedList =
                        (from x in session.Query <NullableOwner>()
                         from x2 in session.Query <NullableOwner>()
                         where x == x2 && x.ManyToOne == null && x.OneToOne.Name == null
                         select x2).ToList();

                    var validManyToOne = new OneToOneEntity {
                        Name = "valid"
                    };
                    session.Save(validManyToOne);
                    nullableOwner2.ManyToOne = validManyToOne;
                    session.Flush();

                    //GH-2988
                    var withNullOrValidList  = session.Query <NullableOwner>().Where(x => x.ManyToOne.Id == validManyToOne.Id || x.ManyToOne == null).ToList();
                    var withNullOrValidList2 = session.Query <NullableOwner>().Where(x => x.ManyToOne == null || x.ManyToOne.Id == validManyToOne.Id).ToList();

                    Assert.That(fullList.Count, Is.EqualTo(2));
                    Assert.That(withValidManyToOneList.Count, Is.EqualTo(0));
                    Assert.That(withValidManyToOneList2.Count, Is.EqualTo(0));
                    Assert.That(withNullManyToOneList.Count, Is.EqualTo(2));
                    Assert.That(withNullManyToOneJoinedList.Count, Is.EqualTo(2));
                    Assert.That(withNullOrValidList.Count, Is.EqualTo(2));
                    Assert.That(withNullOrValidList2.Count, Is.EqualTo(2));
                }
        }