Skip to content

Commit 7dc04d6

Browse files
committed
Fix parent child relation renames, fix sqlite relation renames
1 parent b1ffe17 commit 7dc04d6

File tree

3 files changed

+68
-5
lines changed

3 files changed

+68
-5
lines changed
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
using System.Text;
2+
3+
namespace EntityFrameworkCore.Generator.Extensions;
4+
5+
public static class EnumerableExtensions
6+
{
7+
public static string ToDelimitedString<T>(this IEnumerable<T> values)
8+
{
9+
return values.ToDelimitedString(",");
10+
}
11+
12+
public static string ToDelimitedString<T>(this IEnumerable<T> values, string delimiter)
13+
{
14+
if (values is null)
15+
return null;
16+
17+
var sb = new StringBuilder();
18+
foreach (var i in values)
19+
{
20+
if (sb.Length > 0)
21+
sb.Append(delimiter ?? ",");
22+
sb.Append(i.ToString());
23+
}
24+
25+
return sb.ToString();
26+
}
27+
28+
public static string ToDelimitedString(this IEnumerable<string> values)
29+
{
30+
return values.ToDelimitedString(",");
31+
}
32+
33+
public static string ToDelimitedString(this IEnumerable<string> values, string delimiter)
34+
{
35+
return values.ToDelimitedString(delimiter, null);
36+
}
37+
38+
public static string ToDelimitedString(this IEnumerable<string> values, string delimiter, Func<string, string> escapeDelimiter)
39+
{
40+
if (values is null)
41+
return null;
42+
43+
var sb = new StringBuilder();
44+
foreach (var value in values)
45+
{
46+
if (sb.Length > 0)
47+
sb.Append(delimiter);
48+
49+
var v = escapeDelimiter != null
50+
? escapeDelimiter(value ?? string.Empty)
51+
: value ?? string.Empty;
52+
53+
sb.Append(v);
54+
}
55+
56+
return sb.ToString();
57+
}
58+
}

src/EntityFrameworkCore.Generator.Core/ModelGenerator.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -323,9 +323,6 @@ private void CreateRelationship(EntityContext entityContext, Entity foreignEntit
323323
string primaryName = primaryEntity.EntityClass;
324324
string foreignName = foreignEntity.EntityClass;
325325

326-
string relationshipName = tableKeySchema.Name;
327-
relationshipName = _namer.UniqueRelationshipName(relationshipName);
328-
329326
var foreignMembers = GetKeyMembers(foreignEntity, tableKeySchema.Columns, tableKeySchema.Name);
330327
bool foreignMembersRequired = foreignMembers.Any(c => c.IsRequired);
331328

@@ -336,6 +333,14 @@ private void CreateRelationship(EntityContext entityContext, Entity foreignEntit
336333
if (foreignMembers.Count == 0 || primaryMembers.Count == 0)
337334
return;
338335

336+
string relationshipName = tableKeySchema.Name;
337+
338+
// ensure relationship name for sync support
339+
if (relationshipName.IsNullOrEmpty())
340+
relationshipName = $"FK_{foreignName}_{primaryName}_{primaryMembers.Select(p => p.PropertyName).ToDelimitedString("_")}";
341+
342+
relationshipName = _namer.UniqueRelationshipName(relationshipName);
343+
339344
Relationship foreignRelationship = foreignEntity.Relationships
340345
.FirstOrDefault(r => r.RelationshipName == relationshipName && r.IsForeignKey);
341346

src/EntityFrameworkCore.Generator.Core/Parsing/SourceSynchronizer.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ private void UpdateFromMapping(EntityContext generatedContext, string mappingDir
138138
// sync releationships
139139
foreach (var parsedRelationship in parsedEntity.Relationships)
140140
{
141-
var relationship = entity.Relationships.FirstOrDefault(r => r.RelationshipName == parsedRelationship.RelationshipName);
141+
var relationship = entity.Relationships.FirstOrDefault(r => r.RelationshipName == parsedRelationship.RelationshipName && r.IsForeignKey);
142142
if (relationship == null)
143143
continue;
144144

@@ -195,7 +195,7 @@ private void RenameRelationship(ParsedRelationship parsedRelationship, Relations
195195
}
196196

197197
var primaryEntity = relationship.PrimaryEntity;
198-
var primaryRelationship = primaryEntity.Relationships.FirstOrDefault(r => r.RelationshipName == parsedRelationship.RelationshipName);
198+
var primaryRelationship = primaryEntity.Relationships.FirstOrDefault(r => r.RelationshipName == parsedRelationship.RelationshipName && !r.IsForeignKey);
199199

200200
if (primaryRelationship == null)
201201
return;

0 commit comments

Comments
 (0)