-
Notifications
You must be signed in to change notification settings - Fork 934
/
Copy pathFixtureByCode.cs
130 lines (108 loc) · 3.42 KB
/
FixtureByCode.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by AsyncGenerator.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System.Linq;
using NHibernate.Cfg;
using NHibernate.Cfg.MappingSchema;
using NHibernate.Linq;
using NHibernate.Mapping.ByCode;
using NUnit.Framework;
namespace NHibernate.Test.NHSpecificTest.GH3643
{
using System.Threading.Tasks;
using System.Threading;
[TestFixture]
public class FixtureByCodeAsync : TestCaseMappingByCode
{
protected override void Configure(Configuration configuration)
{
configuration.SetProperty(Environment.UseQueryCache, "true");
configuration.SetProperty(Environment.GenerateStatistics, "true");
}
protected override HbmMapping GetMappings()
{
var mapper = new ModelMapper();
mapper.Class<Entity>(
rc =>
{
rc.Id(x => x.Id);
rc.Bag(
x => x.Children,
m =>
{
m.Access(Accessor.Field);
m.Key(k => k.Column("EntityId"));
},
r => r.OneToMany());
rc.Cache(
cm =>
{
cm.Include(CacheInclude.All);
cm.Usage(CacheUsage.ReadWrite);
});
});
mapper.Class<ChildEntity>(
rc =>
{
rc.Id(x => x.Id);
rc.Cache(
cm =>
{
cm.Include(CacheInclude.All);
cm.Usage(CacheUsage.ReadWrite);
});
});
return mapper.CompileMappingForAllExplicitlyAddedEntities();
}
protected override void OnSetUp()
{
using var session = OpenSession();
using var transaction = session.BeginTransaction();
session.CreateSQLQuery(
"INSERT INTO Entity (Id) VALUES (0)"
).ExecuteUpdate();
session.CreateSQLQuery(
"INSERT INTO ChildEntity (Id, EntityId) VALUES (0, 0)"
).ExecuteUpdate();
session.CreateSQLQuery(
"INSERT INTO ChildEntity (Id, EntityId) VALUES (1, 0)"
).ExecuteUpdate();
transaction.Commit();
}
protected override void OnTearDown()
{
using var session = OpenSession();
using var transaction = session.BeginTransaction();
session.CreateSQLQuery("DELETE FROM ChildEntity").ExecuteUpdate();
session.CreateSQLQuery("DELETE FROM Entity").ExecuteUpdate();
transaction.Commit();
}
[Test]
public async Task LoadsEntityWithEnumIdAndChildrenUsingQueryCacheAsync()
{
await (LoadEntityWithQueryCacheAsync()); // warm up cache
var entity = await (LoadEntityWithQueryCacheAsync());
Assert.That(entity.Children.Count(), Is.EqualTo(2));
Assert.That(Sfi.Statistics.QueryExecutionCount, Is.EqualTo(1), "Unexpected execution count");
Assert.That(Sfi.Statistics.QueryCachePutCount, Is.EqualTo(1), "Unexpected cache put count");
Assert.That(Sfi.Statistics.QueryCacheHitCount, Is.EqualTo(1), "Unexpected cache hit count");
}
private async Task<Entity> LoadEntityWithQueryCacheAsync(CancellationToken cancellationToken = default(CancellationToken))
{
using var session = OpenSession();
using var transaction = session.BeginTransaction();
var entity = (await (session
.Query<Entity>()
.FetchMany(x => x.Children)
.WithOptions(opt => opt.SetCacheable(true))
.ToListAsync(cancellationToken)))[0];
await (transaction.CommitAsync(cancellationToken));
return entity;
}
}
}