|
13 | 13 | using System.Linq;
|
14 | 14 | using NHibernate.Cfg;
|
15 | 15 | using NHibernate.Intercept;
|
| 16 | +using NHibernate.Linq; |
16 | 17 | using NHibernate.Tuple.Entity;
|
17 | 18 | using NUnit.Framework;
|
18 | 19 | using NUnit.Framework.Constraints;
|
19 |
| -using NHibernate.Linq; |
20 | 20 |
|
21 | 21 | namespace NHibernate.Test.LazyProperty
|
22 | 22 | {
|
@@ -69,6 +69,7 @@ protected override void OnSetUp()
|
69 | 69 | Id = 1,
|
70 | 70 | ALotOfText = "a lot of text ...",
|
71 | 71 | Image = new byte[10],
|
| 72 | + NoSetterImage = new byte[10], |
72 | 73 | FieldInterceptor = "Why not that name?"
|
73 | 74 | });
|
74 | 75 | tx.Commit();
|
@@ -393,5 +394,58 @@ public async Task CanMergeTransientWithLazyPropertyInCollectionAsync()
|
393 | 394 | Assert.That(book.Words.First().Content, Is.EqualTo(new byte[1] { 0 }));
|
394 | 395 | }
|
395 | 396 | }
|
| 397 | + |
| 398 | + [Test(Description = "GH-3333")] |
| 399 | + public async Task GetLazyPropertyWithNoSetterAccessor_PropertyShouldBeInitializedAsync() |
| 400 | + { |
| 401 | + using (ISession s = OpenSession()) |
| 402 | + { |
| 403 | + var book = await (s.GetAsync<Book>(1)); |
| 404 | + var image = book.NoSetterImage; |
| 405 | + // Fails. Property remains uninitialized after it has been accessed. |
| 406 | + Assert.That(NHibernateUtil.IsPropertyInitialized(book, "NoSetterImage"), Is.True); |
| 407 | + } |
| 408 | + } |
| 409 | + |
| 410 | + [Test(Description = "GH-3333")] |
| 411 | + public async Task GetLazyPropertyWithNoSetterAccessorTwice_ResultsAreSameObjectAsync() |
| 412 | + { |
| 413 | + using (ISession s = OpenSession()) |
| 414 | + { |
| 415 | + var book = await (s.GetAsync<Book>(1)); |
| 416 | + var image = book.NoSetterImage; |
| 417 | + var sameImage = book.NoSetterImage; |
| 418 | + // Fails. Each call to a property getter returns a new object. |
| 419 | + Assert.That(ReferenceEquals(image, sameImage), Is.True); |
| 420 | + } |
| 421 | + } |
| 422 | + |
| 423 | + [Test] |
| 424 | + public async Task CanSetValueForLazyPropertyNoSetterAsync() |
| 425 | + { |
| 426 | + Book book; |
| 427 | + using (ISession s = OpenSession()) |
| 428 | + { |
| 429 | + book = await (s.GetAsync<Book>(1)); |
| 430 | + book.NoSetterImage = new byte[]{10}; |
| 431 | + } |
| 432 | + |
| 433 | + Assert.That(NHibernateUtil.IsPropertyInitialized(book, nameof(book.NoSetterImage)), Is.True); |
| 434 | + CollectionAssert.AreEqual(book.NoSetterImage, new byte[] { 10 }); |
| 435 | + } |
| 436 | + |
| 437 | + [Test] |
| 438 | + public async Task CanFetchLazyPropertyNoSetterAsync() |
| 439 | + { |
| 440 | + using (ISession s = OpenSession()) |
| 441 | + { |
| 442 | + var book = await (s |
| 443 | + .Query<Book>() |
| 444 | + .Fetch(x => x.NoSetterImage) |
| 445 | + .FirstAsync(x => x.Id == 1)); |
| 446 | + |
| 447 | + Assert.That(NHibernateUtil.IsPropertyInitialized(book, nameof(book.NoSetterImage)), Is.True); |
| 448 | + } |
| 449 | + } |
396 | 450 | }
|
397 | 451 | }
|
0 commit comments