Skip to content

Commit 4906c14

Browse files
committed
Update to emit transformed NavPropertyNames (PR #102 by dmayhak)
1 parent 8608acb commit 4906c14

File tree

3 files changed

+31
-12
lines changed

3 files changed

+31
-12
lines changed

src/EntityFrameworkCore.Scaffolding.Handlebars/HbsCSharpDbContextGenerator.cs

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -502,7 +502,7 @@ private void GenerateKey(IKey key, IEntityType entityType, bool useDataAnnotatio
502502

503503
var lines = new List<string>
504504
{
505-
$".{nameof(EntityTypeBuilder.HasKey)}(e => {GenerateLambdaToKey(key.Properties, "e")})"
505+
$".{nameof(EntityTypeBuilder.HasKey)}(e => {GenerateLambdaToKey(key.Properties, "e", EntityTypeTransformationService.TransformPropertyName)})"
506506
};
507507

508508
if (explicitName)
@@ -568,7 +568,7 @@ private void GenerateIndex(IIndex index, IndentedStringBuilder sb)
568568
{
569569
var lines = new List<string>
570570
{
571-
$".{nameof(EntityTypeBuilder.HasIndex)}(e => {GenerateLambdaToKey(index.Properties, "e")})"
571+
$".{nameof(EntityTypeBuilder.HasIndex)}(e => {GenerateLambdaToKey(index.Properties, "e", EntityTypeTransformationService.TransformPropertyName)})"
572572
};
573573

574574
var annotations = index.GetAnnotations().ToList();
@@ -623,7 +623,7 @@ private void GenerateProperty(IProperty property, bool useDataAnnotations, Inden
623623
{
624624
var lines = new List<string>
625625
{
626-
$".{nameof(EntityTypeBuilder.Property)}(e => e.{property.Name})"
626+
$".{nameof(EntityTypeBuilder.Property)}(e => e.{EntityTypeTransformationService.TransformPropertyName(property.Name)})"
627627
};
628628

629629
var annotations = property.GetAnnotations().ToList();
@@ -800,24 +800,24 @@ private void GenerateRelationship(IForeignKey foreignKey, bool useDataAnnotation
800800

801801
var lines = new List<string>
802802
{
803-
$".{nameof(EntityTypeBuilder.HasOne)}(" + (foreignKey.DependentToPrincipal != null ? $"d => d.{foreignKey.DependentToPrincipal.Name}" : null) + ")",
803+
$".{nameof(EntityTypeBuilder.HasOne)}(" + (foreignKey.DependentToPrincipal != null ? $"d => d.{EntityTypeTransformationService.TransformNavPropertyName(foreignKey.DependentToPrincipal.Name)}" : null) + ")",
804804
$".{(foreignKey.IsUnique ? nameof(ReferenceNavigationBuilder.WithOne) : nameof(ReferenceNavigationBuilder.WithMany))}"
805-
+ $"(" + (foreignKey.PrincipalToDependent != null ? $"p => p.{foreignKey.PrincipalToDependent.Name}" : null) + ")"
805+
+ $"(" + (foreignKey.PrincipalToDependent != null ? $"p => p.{EntityTypeTransformationService.TransformNavPropertyName(foreignKey.PrincipalToDependent.Name)}" : null) + ")"
806806
};
807807

808808
if (!foreignKey.PrincipalKey.IsPrimaryKey())
809809
{
810810
canUseDataAnnotations = false;
811811
lines.Add(
812812
$".{nameof(ReferenceReferenceBuilder.HasPrincipalKey)}"
813-
+ (foreignKey.IsUnique ? $"<{((ITypeBase)foreignKey.PrincipalEntityType).DisplayName()}>" : "")
814-
+ $"(p => {GenerateLambdaToKey(foreignKey.PrincipalKey.Properties, "p")})");
813+
+ (foreignKey.IsUnique ? $"<{EntityTypeTransformationService.TransformPropertyName(((ITypeBase)foreignKey.PrincipalEntityType).DisplayName())}>" : "")
814+
+ $"(p => {GenerateLambdaToKey(foreignKey.PrincipalKey.Properties, "p", EntityTypeTransformationService.TransformNavPropertyName)})");
815815
}
816816

817817
lines.Add(
818818
$".{nameof(ReferenceReferenceBuilder.HasForeignKey)}"
819-
+ (foreignKey.IsUnique ? $"<{((ITypeBase)foreignKey.DeclaringEntityType).DisplayName()}>" : "")
820-
+ $"(d => {GenerateLambdaToKey(foreignKey.Properties, "d")})");
819+
+ (foreignKey.IsUnique ? $"<{EntityTypeTransformationService.TransformPropertyName(((ITypeBase)foreignKey.DeclaringEntityType).DisplayName())}>" : "")
820+
+ $"(d => {GenerateLambdaToKey(foreignKey.Properties, "d", EntityTypeTransformationService.TransformPropertyName)})");
821821

822822
var defaultOnDeleteAction = foreignKey.IsRequired
823823
? DeleteBehavior.Cascade
@@ -942,13 +942,14 @@ private void GenerateSequence(ISequence sequence, IndentedStringBuilder sb)
942942

943943
private static string GenerateLambdaToKey(
944944
IReadOnlyList<IProperty> properties,
945-
string lambdaIdentifier)
945+
string lambdaIdentifier,
946+
Func<string, string> nameTransform)
946947
{
947948
return properties.Count <= 0
948949
? ""
949950
: properties.Count == 1
950-
? $"{lambdaIdentifier}.{properties[0].Name}"
951-
: $"new {{ {string.Join(", ", properties.Select(p => lambdaIdentifier + "." + p.Name))} }}";
951+
? $"{lambdaIdentifier}.{nameTransform(properties[0].Name)}"
952+
: $"new {{ {string.Join(", ", properties.Select(p => lambdaIdentifier + "." + nameTransform(p.Name)))} }}";
952953
}
953954

954955
private static void RemoveAnnotation(ref List<IAnnotation> annotations, string annotationName)

src/EntityFrameworkCore.Scaffolding.Handlebars/HbsEntityTypeTransformationService.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,17 @@ public string TransformPropertyName(string propertyName)
8181
return PropertyTransformer?.Invoke(propTypeInfo)?.PropertyName ?? propertyName;
8282
}
8383

84+
/// <summary>
85+
/// Transform single navigation property name.
86+
/// </summary>
87+
/// <param name="propertyName">Property name.</param>
88+
/// <returns>Transformed property name.</returns>
89+
public string TransformNavPropertyName(string propertyName)
90+
{
91+
var propTypeInfo = new EntityPropertyInfo { PropertyName = propertyName };
92+
return NavPropertyTransformer?.Invoke(propTypeInfo)?.PropertyName ?? propertyName;
93+
}
94+
8495
/// <summary>
8596
/// Transform entity type constructor.
8697
/// </summary>

src/EntityFrameworkCore.Scaffolding.Handlebars/IEntityTypeTransformationService.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,13 @@ public interface IEntityTypeTransformationService
2828
/// <returns>Transformed property name.</returns>
2929
string TransformPropertyName(string propertyName);
3030

31+
/// <summary>
32+
/// Transform single navigation property name.
33+
/// </summary>
34+
/// <param name="propertyName">Property name.</param>
35+
/// <returns>Transformed property name.</returns>
36+
string TransformNavPropertyName(string propertyName);
37+
3138
/// <summary>
3239
/// Transform entity type constructor.
3340
/// </summary>

0 commit comments

Comments
 (0)