Skip to content

Commit 12fd49d

Browse files
committed
[ksqlDb.RestApi.Client]: fixed multiple column mappings in model builder #93
1 parent fae76e8 commit 12fd49d

File tree

2 files changed

+32
-6
lines changed

2 files changed

+32
-6
lines changed

Tests/ksqlDB.RestApi.Client.Tests/FluentAPI/Builders/ModelBuilderTests.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,32 @@ public void MultipleMappingsForSameProperty()
185185
fieldMetadata.IgnoreInDML.Should().BeTrue();
186186
}
187187

188+
189+
[Test]
190+
public void MultipleMappingsForSameProperty_Decimal()
191+
{
192+
//Arrange
193+
string columnName = "alter";
194+
short precision = 2;
195+
short scale = 3;
196+
197+
//Act
198+
builder.Entity<Payment>()
199+
.Property(b => b.Amount)
200+
.Decimal(precision, scale);
201+
202+
builder.Entity<Payment>()
203+
.Property(b => b.Amount)
204+
.HasColumnName(columnName);
205+
206+
//Assert
207+
var entityMetadata = ((IMetadataProvider)builder).GetEntities().FirstOrDefault(c => c.Type == typeof(Payment));
208+
entityMetadata.Should().NotBeNull();
209+
var fieldMetadata = entityMetadata!.FieldsMetadata.First(c => c.MemberInfo.Name == nameof(Payment.Amount));
210+
fieldMetadata.ColumnName.Should().Be(columnName);
211+
((DecimalFieldMetadata)fieldMetadata).Precision.Should().Be(precision);
212+
}
213+
188214
[Test]
189215
public void Property_IgnoreNestedField()
190216
{

ksqlDb.RestApi.Client/FluentAPI/Builders/EntityTypeBuilder.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,12 @@ public IFieldTypeBuilder<TProperty> Property<TProperty>(Expression<Func<TEntity,
7272
switch (typeof(TProperty))
7373
{
7474
case { } type when type == typeof(decimal):
75-
var decimalFieldMetadata = new DecimalFieldMetadata(fieldMetadata);
75+
var decimalFieldMetadata = fieldMetadata as DecimalFieldMetadata ?? new DecimalFieldMetadata(fieldMetadata);
7676
builder = new DecimalFieldTypeBuilder<TProperty>(decimalFieldMetadata);
7777
fieldMetadata = decimalFieldMetadata;
7878
break;
7979
case { } type when type == typeof(byte[]):
80-
var bytesArrayFieldMetadata = new BytesArrayFieldMetadata(fieldMetadata);
80+
var bytesArrayFieldMetadata = fieldMetadata as BytesArrayFieldMetadata ?? new BytesArrayFieldMetadata(fieldMetadata);
8181
builder = new BytesArrayFieldTypeBuilder<TProperty>(bytesArrayFieldMetadata);
8282
fieldMetadata = bytesArrayFieldMetadata;
8383
break;
@@ -105,7 +105,7 @@ internal void IgnoreRowTime()
105105
MemberInfo? propertyInfo = props.FirstOrDefault();
106106
if (propertyInfo != null)
107107
{
108-
AddFieldMetadata(propertyInfo);
108+
AddFieldMetadata(propertyInfo, ignoreInDDL: true);
109109
return;
110110
}
111111

@@ -116,18 +116,18 @@ internal void IgnoreRowTime()
116116

117117
if (fieldInfo != null)
118118
{
119-
AddFieldMetadata(fieldInfo);
119+
AddFieldMetadata(fieldInfo, ignoreInDDL: true);
120120
}
121121
}
122122

123-
private void AddFieldMetadata(MemberInfo memberInfo)
123+
private void AddFieldMetadata(MemberInfo memberInfo, bool ignoreInDDL)
124124
{
125125
var fieldMetadata = new FieldMetadata
126126
{
127127
MemberInfo = memberInfo,
128128
Path = memberInfo.Name,
129129
FullPath = memberInfo.Name,
130-
IgnoreInDDL = true
130+
IgnoreInDDL = ignoreInDDL
131131
};
132132

133133
Metadata.FieldsMetadataDict[memberInfo] = fieldMetadata;

0 commit comments

Comments
 (0)