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