Skip to content

Commit bd0e053

Browse files
committed
Set precision and scale of temp tables and scalar collections with decimals to 38,18
1 parent 9168289 commit bd0e053

File tree

6 files changed

+43
-35
lines changed

6 files changed

+43
-35
lines changed

samples/Thinktecture.EntityFrameworkCore.Benchmarks/Database/SqlServerBenchmarkDbContext.cs

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,6 @@ public SqlServerBenchmarkDbContext(DbContextOptions<SqlServerBenchmarkDbContext>
77
{
88
}
99

10-
/// <inheritdoc />
11-
protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
12-
{
13-
configurationBuilder.Properties<decimal>(builder => builder
14-
.HavePrecision(18, 5));
15-
}
16-
1710
/// <inheritdoc />
1811
protected override void OnModelCreating(ModelBuilder modelBuilder)
1912
{

samples/Thinktecture.EntityFrameworkCore.SqlServer.Samples/Database/DemoDbContext.cs

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,6 @@ public DemoDbContext(DbContextOptions<DemoDbContext> options, IDbDefaultSchema?
2121
Schema = schema?.Schema;
2222
}
2323

24-
/// <inheritdoc />
25-
protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
26-
{
27-
configurationBuilder.Properties<decimal>(builder => builder
28-
.HavePrecision(18, 5));
29-
}
30-
3124
/// <inheritdoc />
3225
protected override void OnModelCreating(ModelBuilder modelBuilder)
3326
{

src/Thinktecture.EntityFrameworkCore.BulkOperations/EntityFrameworkCore/BulkOperations/TempTableConvention.cs

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.Diagnostics.CodeAnalysis;
12
using Microsoft.EntityFrameworkCore.Infrastructure;
23
using Microsoft.EntityFrameworkCore.Metadata.Builders;
34
using Microsoft.EntityFrameworkCore.Metadata.Conventions;
@@ -43,23 +44,41 @@ public void ProcessModelInitialized(IConventionModelBuilder modelBuilder, IConve
4344
AddTempTable<short?>(modelBuilder);
4445
AddTempTable<float>(modelBuilder);
4546
AddTempTable<float?>(modelBuilder);
46-
AddTempTable<decimal>(modelBuilder);
47-
AddTempTable<decimal?>(modelBuilder);
47+
AddTempTable<decimal>(modelBuilder, (38, 18));
48+
AddTempTable<decimal?>(modelBuilder, (38, 18));
4849
AddTempTable<TimeSpan>(modelBuilder);
4950
AddTempTable<TimeSpan?>(modelBuilder);
5051
AddTempTable<string>(modelBuilder);
5152
}
5253

53-
private static void AddTempTable<TColumn1>(IConventionModelBuilder modelBuilder)
54+
private static void AddTempTable<TColumn1>(
55+
IConventionModelBuilder modelBuilder,
56+
(int Precision, int Scale)? precisionAndScale = null)
5457
{
5558
var type = typeof(TempTable<TColumn1>);
5659
var builder = modelBuilder.SharedTypeEntity(EntityNameProvider.GetTempTableName(type), type, fromDataAnnotation: true);
5760

5861
if (builder is null)
5962
return;
6063

64+
if (precisionAndScale is not null)
65+
SetScaleAndPrecision<TColumn1>(builder, precisionAndScale.Value);
66+
6167
builder.ToTable($"#{type.ShortDisplayName()}");
6268
builder.HasNoKey();
6369
builder.ExcludeTableFromMigrations(true);
6470
}
71+
72+
private static void SetScaleAndPrecision<TColumn1>(
73+
IConventionEntityTypeBuilder builder,
74+
(int Precision, int Scale) precisionAndScale)
75+
{
76+
var propertyBuilder = builder.Property(typeof(TColumn1), nameof(TempTable<TColumn1>.Column1), fromDataAnnotation: true);
77+
78+
if (propertyBuilder is null)
79+
return;
80+
81+
propertyBuilder.HasPrecision(precisionAndScale.Precision, true);
82+
propertyBuilder.HasScale(precisionAndScale.Scale, true);
83+
}
6584
}

src/Thinktecture.EntityFrameworkCore.SqlServer/EntityFrameworkCore/Parameters/SqlServerCollectionParameterConvention.cs

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,16 @@ public void ProcessModelInitialized(IConventionModelBuilder modelBuilder, IConve
3131
AddScalarCollectionParameter<short?>(modelBuilder);
3232
AddScalarCollectionParameter<float>(modelBuilder);
3333
AddScalarCollectionParameter<float?>(modelBuilder);
34-
AddScalarCollectionParameter<decimal>(modelBuilder);
35-
AddScalarCollectionParameter<decimal?>(modelBuilder);
34+
AddScalarCollectionParameter<decimal>(modelBuilder, (38, 18));
35+
AddScalarCollectionParameter<decimal?>(modelBuilder, (38, 18));
3636
AddScalarCollectionParameter<TimeSpan>(modelBuilder);
3737
AddScalarCollectionParameter<TimeSpan?>(modelBuilder);
3838
AddScalarCollectionParameter<string>(modelBuilder);
3939
}
4040

41-
private static void AddScalarCollectionParameter<TColumn1>(IConventionModelBuilder modelBuilder)
41+
private static void AddScalarCollectionParameter<TColumn1>(
42+
IConventionModelBuilder modelBuilder,
43+
(int Precision, int Scale)? precisionAndScale = null)
4244
{
4345
var builder = modelBuilder.SharedTypeEntity(EntityNameProvider.GetCollectionParameterName(typeof(TColumn1), true),
4446
typeof(ScalarCollectionParameter<TColumn1>),
@@ -47,8 +49,24 @@ private static void AddScalarCollectionParameter<TColumn1>(IConventionModelBuild
4749
if (builder is null)
4850
return;
4951

52+
if (precisionAndScale is not null)
53+
SetScaleAndPrecision<TColumn1>(builder, precisionAndScale.Value);
54+
5055
builder.ToTable(typeof(ScalarCollectionParameter<TColumn1>).ShortDisplayName());
5156
builder.HasNoKey();
5257
builder.ExcludeTableFromMigrations(true);
5358
}
59+
60+
private static void SetScaleAndPrecision<TColumn1>(
61+
IConventionEntityTypeBuilder builder,
62+
(int Precision, int Scale) precisionAndScale)
63+
{
64+
var propertyBuilder = builder.Property(typeof(TColumn1), nameof(ScalarCollectionParameter<TColumn1>.Value), fromDataAnnotation: true);
65+
66+
if (propertyBuilder is null)
67+
return;
68+
69+
propertyBuilder.HasPrecision(precisionAndScale.Precision, fromDataAnnotation: true);
70+
propertyBuilder.HasScale(precisionAndScale.Scale, fromDataAnnotation: true);
71+
}
5472
}

tests/Thinktecture.EntityFrameworkCore.SqlServer.Tests/Extensions/SqlServerOperationBuilderExtensionsTests/MigrationExtensionsTestDbContext.cs

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,6 @@ public MigrationExtensionsTestDbContext(DbContextOptions<MigrationExtensionsTest
99
{
1010
}
1111

12-
/// <inheritdoc />
13-
protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
14-
{
15-
configurationBuilder.Properties<decimal>(builder => builder
16-
.HavePrecision(18, 5));
17-
}
18-
1912
protected override void OnModelCreating(ModelBuilder modelBuilder)
2013
{
2114
base.OnModelCreating(modelBuilder);

tests/Thinktecture.EntityFrameworkCore.SqlServer.Tests/TestDatabaseContext/TestDbContext.cs

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,6 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
5454

5555
Configure?.Invoke(optionsBuilder);
5656
}
57-
58-
/// <inheritdoc />
59-
protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
60-
{
61-
configurationBuilder.Properties<decimal>(builder => builder
62-
.HavePrecision(18, 5));
63-
}
64-
6557
protected override void OnModelCreating(ModelBuilder modelBuilder)
6658
{
6759
base.OnModelCreating(modelBuilder);

0 commit comments

Comments
 (0)