-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathLinq2dbKernel.cs
More file actions
41 lines (37 loc) · 1.8 KB
/
Copy pathLinq2dbKernel.cs
File metadata and controls
41 lines (37 loc) · 1.8 KB
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
using SIL.Harmony.Core;
using LinqToDB.EntityFrameworkCore;
using LinqToDB.Extensions.Logging;
using LinqToDB.Mapping;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
namespace SIL.Harmony.Linq2db;
public static class Linq2dbKernel
{
public static DbContextOptionsBuilder UseLinqToDbCrdt(this DbContextOptionsBuilder builder, IServiceProvider provider)
{
LinqToDBForEFTools.Initialize();
return builder.UseLinqToDB(optionsBuilder =>
{
var mappingSchema = optionsBuilder.DbContextOptions.GetLinqToDBOptions()?.ConnectionOptions
.MappingSchema;
if (mappingSchema is null)
{
mappingSchema = new MappingSchema();
optionsBuilder.AddMappingSchema(mappingSchema);
}
new FluentMappingBuilder(mappingSchema).HasAttribute<Commit>(new ColumnAttribute("DateTime",
nameof(Commit.HybridDateTime) + "." + nameof(HybridDateTime.DateTime)))
.HasAttribute<Commit>(new ColumnAttribute(nameof(HybridDateTime.Counter),
nameof(Commit.HybridDateTime) + "." + nameof(HybridDateTime.Counter)))
.Entity<Commit>()
//need to use ticks here because the DateTime is stored as UTC, but the db records it as unspecified
.Property(commit => commit.HybridDateTime.DateTime).HasConversionFunc(dt => dt.UtcDateTime,
dt => new DateTimeOffset(dt.Ticks, TimeSpan.Zero))
.Build();
var loggerFactory = provider.GetService<ILoggerFactory>();
if (loggerFactory is not null)
optionsBuilder.AddCustomOptions(dataOptions => dataOptions.UseLoggerFactory(loggerFactory));
});
}
}