Skip to content

Commit 98b2d87

Browse files
committed
Add DB type mapping and nullable-safe string builder
1 parent cbadc79 commit 98b2d87

100 files changed

Lines changed: 4049 additions & 352 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.editorconfig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ indent_size = 4
1010
insert_final_newline = true
1111
trim_trailing_whitespace = true
1212
vsspell_section_id = main
13-
vsspell_ignored_words_main = accessor|app|awaitable|cacheable|clr|deconstruct|deserialization|deserializer|inline|json|middleware|mvc|nullable|queryable|serialization|serializer|upsert|validator
13+
vsspell_ignored_words_main = File:dictionary.dic
1414

1515
# XML Configuration Files
1616
[*.{xml,config,props,targets,nuspec,resx,ruleset,vsixmanifest,vsct,refactorlog,runsettings}]

.github/dependabot.yml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,6 @@ updates:
4343
patterns:
4444
- "Serilog"
4545
- "Serilog.*"
46-
Hangfire:
47-
patterns:
48-
- "Hangfire"
49-
- "Hangfire.*"
5046
Testcontainers:
5147
patterns:
5248
- "Testcontainers.*"

.github/workflows/dotnet.yml

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ env:
66
DOTNET_ENVIRONMENT: github
77
ASPNETCORE_ENVIRONMENT: github
88
BUILD_PATH: "${{github.workspace}}/artifacts"
9-
COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
9+
10+
permissions:
11+
contents: read
1012

1113
on:
1214
push:
@@ -47,7 +49,7 @@ jobs:
4749
- name: Install .NET
4850
uses: actions/setup-dotnet@v5
4951
with:
50-
dotnet-version: 9.x
52+
dotnet-version: 10.x
5153

5254
- name: Restore Dependencies
5355
run: dotnet restore
@@ -56,13 +58,21 @@ jobs:
5658
run: dotnet build --no-restore --configuration Release
5759

5860
- name: Run Test
59-
run: dotnet test --no-build --configuration Release --collect:"XPlat Code Coverage" --settings coverlet.runsettings
61+
run: dotnet test --no-build --configuration Release --coverlet --coverlet-output-format lcov
6062

61-
- name: Report Coverage
63+
- name: Collect Coverage
6264
if: success()
65+
id: coverage
66+
run: |
67+
FILES=$(find ${{github.workspace}} -name 'coverage.*.info' -print | tr '\n' ' ')
68+
echo "files=$FILES" >> $GITHUB_OUTPUT
69+
70+
- name: Report Coverage
71+
if: success() && steps.coverage.outputs.files != ''
6372
uses: coverallsapp/github-action@v2
73+
continue-on-error: true
6474
with:
65-
file: "${{github.workspace}}/test/*/TestResults/*/coverage.info"
75+
files: ${{ steps.coverage.outputs.files }}
6676
format: lcov
6777

6878
- name: Create Packages
@@ -80,6 +90,9 @@ jobs:
8090
runs-on: ubuntu-latest
8191
needs: build
8292
if: success() && github.event_name != 'pull_request' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/v'))
93+
permissions:
94+
contents: read
95+
packages: write
8396

8497
steps:
8598
- name: Download Artifact
@@ -88,24 +101,30 @@ jobs:
88101
name: packages
89102

90103
- name: Publish Packages GitHub
104+
env:
105+
GITHUB_PACKAGE_TOKEN: ${{ secrets.GITHUB_TOKEN }}
91106
run: |
92107
for package in $(find -name "*.nupkg"); do
93108
echo "${0##*/}": Pushing $package...
94-
dotnet nuget push $package --source https://nuget.pkg.github.com/loresoft/index.json --api-key ${{ secrets.GITHUB_TOKEN }} --skip-duplicate
109+
dotnet nuget push "$package" --source https://nuget.pkg.github.com/loresoft/index.json --api-key "$GITHUB_PACKAGE_TOKEN" --skip-duplicate
95110
done
96111
97112
- name: Publish Packages feedz
113+
env:
114+
FEEDZ_API_KEY: ${{ secrets.FEEDDZ_KEY }}
98115
run: |
99116
for package in $(find -name "*.nupkg"); do
100117
echo "${0##*/}": Pushing $package...
101-
dotnet nuget push $package --source https://f.feedz.io/loresoft/open/nuget/index.json --api-key ${{ secrets.FEEDDZ_KEY }} --skip-duplicate
118+
dotnet nuget push "$package" --source https://f.feedz.io/loresoft/open/nuget/index.json --api-key "$FEEDZ_API_KEY" --skip-duplicate
102119
done
103120
104121
- name: Publish Packages Nuget
105122
if: startsWith(github.ref, 'refs/tags/v')
123+
env:
124+
NUGET_API_KEY: ${{ secrets.NUGET_KEY }}
106125
run: |
107126
for package in $(find -name "*.nupkg"); do
108127
echo "${0##*/}": Pushing $package...
109-
dotnet nuget push $package --source https://api.nuget.org/v3/index.json --api-key ${{ secrets.NUGET_KEY }} --skip-duplicate
128+
dotnet nuget push "$package" --source https://api.nuget.org/v3/index.json --api-key "$NUGET_API_KEY" --skip-duplicate
110129
done
111130

.github/workflows/stale.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ jobs:
1313
issues: write
1414
pull-requests: write
1515
steps:
16-
- uses: actions/stale@v9
16+
- uses: actions/stale@v10
1717
with:
1818
repo-token: ${{ secrets.GITHUB_TOKEN }}
1919

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,3 +243,4 @@ _Pvt_Extensions
243243
*.GhostDoc.xml
244244
*.csv
245245
coverage.xml
246+
*.received.txt

Directory.Packages.props

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,45 +5,55 @@
55
</PropertyGroup>
66
<ItemGroup>
77
<PackageVersion Include="AssemblyMetadata.Generators" Version="2.2.0" />
8-
<PackageVersion Include="AutoMapper" Version="15.1.0" />
8+
<PackageVersion Include="AwesomeAssertions" Version="9.4.0" />
9+
<PackageVersion Include="AutoMapper" Version="16.1.1" />
910
<PackageVersion Include="coverlet.collector" Version="10.0.1" />
11+
<PackageVersion Include="coverlet.MTP" Version="10.0.1" />
1012
<PackageVersion Include="dbup-postgresql" Version="4.5.0" />
1113
<PackageVersion Include="dbup-sqlserver" Version="7.2.0" />
12-
<PackageVersion Include="FluentValidation" Version="12.1.0" />
14+
<PackageVersion Include="FluentMigrator" Version="8.0.1" />
15+
<PackageVersion Include="FluentMigrator.Runner.SqlServer" Version="8.0.1" />
16+
<PackageVersion Include="FluentValidation" Version="12.1.1" />
1317
<PackageVersion Include="Humanizer.Core" Version="3.0.10" />
1418
<PackageVersion Include="Injectio" Version="5.1.0" />
1519
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="5.3.0" />
1620
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="10.0.7" />
1721
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="10.0.7" />
1822
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="10.0.7" />
1923
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite.NetTopologySuite" Version="10.0.7" />
20-
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="10.0.7" />
24+
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="10.0.9" />
2125
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite" Version="10.0.7" />
22-
<PackageVersion Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="10.0.8" />
23-
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="10.0.8" />
24-
<PackageVersion Include="Microsoft.Extensions.Configuration.UserSecrets" Version="10.0.8" />
26+
<PackageVersion Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="10.0.9" />
27+
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="10.0.9" />
28+
<PackageVersion Include="Microsoft.Extensions.Configuration.UserSecrets" Version="10.0.9" />
2529
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="10.0.9" />
26-
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.8" />
30+
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.9" />
2731
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.6.0" />
2832
<PackageVersion Include="MinVer" Version="7.0.0" />
33+
<PackageVersion Include="NetTopologySuite" Version="2.6.0" />
2934
<PackageVersion Include="Npgsql" Version="6.0.11" />
3035
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="10.0.1" />
3136
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL.NetTopologySuite" Version="10.0.1" />
3237
<PackageVersion Include="Oracle.EntityFrameworkCore" Version="10.23.26200" />
3338
<PackageVersion Include="Pomelo.EntityFrameworkCore.MySql" Version="9.0.0" />
3439
<PackageVersion Include="Pomelo.EntityFrameworkCore.MySql.NetTopologySuite" Version="9.0.0" />
35-
<PackageVersion Include="SchemaSaurus.MySql" Version="1.2.0" />
36-
<PackageVersion Include="SchemaSaurus.Oracle" Version="1.2.0" />
37-
<PackageVersion Include="SchemaSaurus.PostgreSql" Version="1.2.0" />
38-
<PackageVersion Include="SchemaSaurus.Sqlite" Version="1.2.0" />
39-
<PackageVersion Include="SchemaSaurus.SqlServer" Version="1.2.0" />
40+
<PackageVersion Include="SchemaSaurus.MySql" Version="1.2.1" />
41+
<PackageVersion Include="SchemaSaurus.Oracle" Version="1.2.1" />
42+
<PackageVersion Include="SchemaSaurus.PostgreSql" Version="1.2.1" />
43+
<PackageVersion Include="SchemaSaurus.Sqlite" Version="1.2.1" />
44+
<PackageVersion Include="SchemaSaurus.SqlServer" Version="1.2.1" />
4045
<PackageVersion Include="Scrutor" Version="6.1.0" />
4146
<PackageVersion Include="Serilog.Extensions.Hosting" Version="10.0.0" />
4247
<PackageVersion Include="Serilog.Sinks.Console" Version="6.1.1" />
4348
<PackageVersion Include="Spectre.Console.Cli" Version="0.55.0" />
4449
<PackageVersion Include="Swashbuckle.AspNetCore" Version="10.0.1" />
45-
<PackageVersion Include="xunit" Version="2.9.3" />
46-
<PackageVersion Include="xunit.runner.visualstudio" Version="3.1.5" />
50+
<PackageVersion Include="Testcontainers.MsSql" Version="4.12.0" />
51+
<PackageVersion Include="Testcontainers.MySql" Version="4.12.0" />
52+
<PackageVersion Include="Testcontainers.Oracle" Version="4.12.0" />
53+
<PackageVersion Include="Testcontainers.Postgresql" Version="4.12.0" />
54+
<PackageVersion Include="Verify.XunitV3" Version="31.19.1" />
55+
<PackageVersion Include="XUnit.Hosting" Version="4.0.0" />
56+
<PackageVersion Include="xunit.v3.mtp-v2" Version="3.2.2" />
4757
<PackageVersion Include="YamlDotNet" Version="18.0.0" />
4858
</ItemGroup>
4959
</Project>

EntityFrameworkCore.Generator.slnx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
<Solution>
2-
<Configurations>
3-
<Platform Name="Any CPU" />
4-
<Platform Name="x64" />
5-
<Platform Name="x86" />
6-
</Configurations>
72
<Folder Name="/Build/">
83
<File Path=".github/workflows/dotnet.yml" />
94
<File Path="Directory.Packages.props" />
105
<File Path="README.md" />
116
<File Path="src/Directory.Build.props" />
127
</Folder>
13-
<Folder Name="/Samples/" />
148
<Folder Name="/Tests/">
9+
<File Path="test/Directory.Build.props" />
1510
<Project Path="test/EntityFrameworkCore.Generator.Core.Tests/EntityFrameworkCore.Generator.Core.Tests.csproj" />
11+
<Project Path="test/EntityFrameworkCore.Generator.Migrator/EntityFrameworkCore.Generator.Migrator.csproj" Id="c1a63383-09e3-4425-b731-387f15350c66" />
12+
<Project Path="test/EntityFrameworkCore.Generator.MySql.Tests/EntityFrameworkCore.Generator.MySql.Tests.csproj" Id="eb3e24b4-4382-444a-8d51-4feb9697a37f" />
13+
<Project Path="test/EntityFrameworkCore.Generator.PostgreSql.Tests/EntityFrameworkCore.Generator.PostgreSql.Tests.csproj" Id="038a7b94-c7c0-4c17-bfc1-3b4045ffb0cb" />
14+
<Project Path="test/EntityFrameworkCore.Generator.Sqlite.Tests/EntityFrameworkCore.Generator.Sqlite.Tests.csproj" Id="982bfca5-ac46-4258-80f1-b6281ae5fc95" />
15+
<Project Path="test/EntityFrameworkCore.Generator.SqlServer.Tests/EntityFrameworkCore.Generator.SqlServer.Tests.csproj" Id="89829e06-ff24-46cd-8e58-5a0316c1e541" />
1616
</Folder>
1717
<Project Path="src/EntityFrameworkCore.Generator.Core/EntityFrameworkCore.Generator.Core.csproj" />
1818
<Project Path="src/EntityFrameworkCore.Generator/EntityFrameworkCore.Generator.csproj" />

dictionary.dic

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
accessor
2+
annotatable
3+
app
4+
awaitable
5+
cacheable
6+
clr
7+
csv
8+
deconstruct
9+
deserialization
10+
deserialized
11+
deserializer
12+
deserializing
13+
inline
14+
json
15+
linq
16+
metadata
17+
middleware
18+
mvc
19+
nullable
20+
queryable
21+
serialization
22+
serialized
23+
serializer
24+
sql
25+
sqlite
26+
upsert
27+
validator

docs/ef/entity.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,11 @@ data:
5858
entityNaming: Singular
5959
relationshipNaming: Plural
6060
prefixWithSchemaName: false
61+
typeMapping:
62+
- nativeType: geometry
63+
systemType: NetTopologySuite.Geometries.Geometry
64+
- nativeType: dbo.StringList
65+
systemType: List<string?>
6166
renaming:
6267
entities:
6368
- ^(sp|tbl|udf|vw)_
@@ -107,6 +112,21 @@ Include XML documentation for the generated class. Default: `false`
107112

108113
Include mapping attributes on the entity classes. Default: `false`
109114

115+
### typeMapping
116+
117+
Map a native database type to the generated .NET system type used for entity and model properties.
118+
Native type matching is case-insensitive.
119+
120+
```YAML
121+
data:
122+
entity:
123+
typeMapping:
124+
- nativeType: geometry
125+
systemType: NetTopologySuite.Geometries.Geometry
126+
- nativeType: dbo.StringList
127+
systemType: List<string?>
128+
```
129+
110130
### renaming
111131

112132
Rename entities and properties with regular expressions

0 commit comments

Comments
 (0)