Skip to content

Commit 984945c

Browse files
committed
More issues fixed related to naming transform
Fix conflicting names after a transformation More issues fixed related to naming transform ForeignKeyAttribute propertyType fix
1 parent 4906c14 commit 984945c

File tree

4 files changed

+26
-20
lines changed

4 files changed

+26
-20
lines changed

src/EntityFrameworkCore.Scaffolding.Handlebars/HbsCSharpDbContextGenerator.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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.{EntityTypeTransformationService.TransformPropertyName(property.Name)})"
626+
$".{nameof(EntityTypeBuilder.Property)}(e => e.{EntityTypeTransformationService.TransformPropertyName(property.Name, property.DeclaringType.Name)})"
627627
};
628628

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

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

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

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

822822
var defaultOnDeleteAction = foreignKey.IsRequired
@@ -943,13 +943,13 @@ private void GenerateSequence(ISequence sequence, IndentedStringBuilder sb)
943943
private static string GenerateLambdaToKey(
944944
IReadOnlyList<IProperty> properties,
945945
string lambdaIdentifier,
946-
Func<string, string> nameTransform)
946+
Func<string, string, string> nameTransform)
947947
{
948948
return properties.Count <= 0
949949
? ""
950950
: properties.Count == 1
951-
? $"{lambdaIdentifier}.{nameTransform(properties[0].Name)}"
952-
: $"new {{ {string.Join(", ", properties.Select(p => lambdaIdentifier + "." + nameTransform(p.Name)))} }}";
951+
? $"{lambdaIdentifier}.{nameTransform(properties[0].Name, properties[0].DeclaringType.Name)}"
952+
: $"new {{ {string.Join(", ", properties.Select(p => lambdaIdentifier + "." + nameTransform(p.Name, p.DeclaringType.Name)))} }}";
953953
}
954954

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

src/EntityFrameworkCore.Scaffolding.Handlebars/HbsCSharpEntityTypeGenerator.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -416,11 +416,11 @@ private void GenerateForeignKeyAttribute(INavigation navigation)
416416
{
417417
foreignKeyAttribute.AddParameter(
418418
CSharpHelper.Literal(
419-
string.Join(",", navigation.ForeignKey.Properties.Select(p => p.Name))));
419+
string.Join(",", navigation.ForeignKey.Properties.Select(p => EntityTypeTransformationService.TransformNavPropertyName(p.Name, p.ClrType.Name)))));
420420
}
421421
else
422-
{
423-
foreignKeyAttribute.AddParameter($"nameof({navigation.ForeignKey.Properties.First().Name})");
422+
{
423+
foreignKeyAttribute.AddParameter($"nameof({EntityTypeTransformationService.TransformNavPropertyName(navigation.ForeignKey.Properties.First().Name, navigation.ForeignKey.Properties.First().ClrType.Name)})");
424424
}
425425

426426
NavPropertyAnnotations.Add(new Dictionary<string, object>
@@ -441,11 +441,13 @@ private void GenerateInversePropertyAttribute(INavigation navigation)
441441
{
442442
var inversePropertyAttribute = new AttributeWriter(nameof(InversePropertyAttribute));
443443

444+
var propertyName = EntityTypeTransformationService.TransformNavPropertyName(inverseNavigation.Name, navigation.DeclaringType.Name);
444445
inversePropertyAttribute.AddParameter(
445446
!navigation.DeclaringEntityType.GetPropertiesAndNavigations().Any(
446-
m => m.Name == inverseNavigation.DeclaringEntityType.Name)
447-
? $"nameof({inverseNavigation.DeclaringEntityType.Name}.{inverseNavigation.Name})"
448-
: CSharpHelper.Literal(inverseNavigation.Name));
447+
m => m.Name == inverseNavigation.DeclaringEntityType.Name ||
448+
EntityTypeTransformationService.TransformNavPropertyName(m.Name, navigation.GetTargetType().Name) == EntityTypeTransformationService.TransformNavPropertyName(inverseNavigation.DeclaringEntityType.Name, navigation.GetTargetType().Name))
449+
? $"nameof({EntityTypeTransformationService.TransformEntityName(inverseNavigation.DeclaringType.Name)}.{propertyName})"
450+
: CSharpHelper.Literal(propertyName));
449451

450452
NavPropertyAnnotations.Add(new Dictionary<string, object>
451453
{

src/EntityFrameworkCore.Scaffolding.Handlebars/HbsEntityTypeTransformationService.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,21 +74,23 @@ public string TransformEntityFileName(string entityFileName) =>
7474
/// Transform single property name.
7575
/// </summary>
7676
/// <param name="propertyName">Property name.</param>
77+
/// <param name="propertyType">Property type</param>
7778
/// <returns>Transformed property name.</returns>
78-
public string TransformPropertyName(string propertyName)
79+
public string TransformPropertyName(string propertyName, string propertyType)
7980
{
80-
var propTypeInfo = new EntityPropertyInfo { PropertyName = propertyName };
81+
var propTypeInfo = new EntityPropertyInfo { PropertyName = propertyName, PropertyType = propertyType };
8182
return PropertyTransformer?.Invoke(propTypeInfo)?.PropertyName ?? propertyName;
8283
}
8384

8485
/// <summary>
8586
/// Transform single navigation property name.
8687
/// </summary>
8788
/// <param name="propertyName">Property name.</param>
89+
/// <param name="propertyType">Property type</param>
8890
/// <returns>Transformed property name.</returns>
89-
public string TransformNavPropertyName(string propertyName)
91+
public string TransformNavPropertyName(string propertyName, string propertyType)
9092
{
91-
var propTypeInfo = new EntityPropertyInfo { PropertyName = propertyName };
93+
var propTypeInfo = new EntityPropertyInfo { PropertyName = propertyName, PropertyType = propertyType };
9294
return NavPropertyTransformer?.Invoke(propTypeInfo)?.PropertyName ?? propertyName;
9395
}
9496

src/EntityFrameworkCore.Scaffolding.Handlebars/IEntityTypeTransformationService.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,17 @@ public interface IEntityTypeTransformationService
2525
/// Transform single property name.
2626
/// </summary>
2727
/// <param name="propertyName">Property name.</param>
28+
/// <param name="propertyType">Property type</param>
2829
/// <returns>Transformed property name.</returns>
29-
string TransformPropertyName(string propertyName);
30+
string TransformPropertyName(string propertyName, string propertyType);
3031

3132
/// <summary>
3233
/// Transform single navigation property name.
3334
/// </summary>
3435
/// <param name="propertyName">Property name.</param>
36+
/// <param name="propertyType">Property type</param>
3537
/// <returns>Transformed property name.</returns>
36-
string TransformNavPropertyName(string propertyName);
38+
string TransformNavPropertyName(string propertyName, string propertyType);
3739

3840
/// <summary>
3941
/// Transform entity type constructor.

0 commit comments

Comments
 (0)