-
Notifications
You must be signed in to change notification settings - Fork 244
/
Copy pathDbDapper.cs
35 lines (27 loc) · 1.1 KB
/
DbDapper.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
using Dapper;
using Mvc.Models;
using Npgsql;
namespace Mvc.Database;
public sealed class DbDapper
{
private static readonly Comparison<Fortune> FortuneSortComparison = (a, b) => string.CompareOrdinal(a.Message, b.Message);
private readonly NpgsqlDataSource _dataSource;
public DbDapper(AppSettings appSettings)
{
ArgumentException.ThrowIfNullOrEmpty(appSettings.ConnectionString);
#if NET8_0_OR_GREATER
_dataSource = new NpgsqlSlimDataSourceBuilder(appSettings.ConnectionString).Build();
#else
_dataSource = new NpgsqlDataSourceBuilder(appSettings.ConnectionString).Build();
#endif
}
[DapperAot, CacheCommand, StrictTypes, QueryColumns("id", "message")]
public async Task<List<Fortune>> LoadFortunesRowsDapper()
{
await using var connection = _dataSource.CreateConnection();
var result = (await connection.QueryAsync<Fortune>($"SELECT id, message FROM fortune")).AsList();
result.Add(new Fortune { Id = 0, Message = "Additional fortune added at request time." });
result.Sort(FortuneSortComparison);
return result;
}
}