Skip to content

Commit 9856d71

Browse files
authored
Merge pull request AzureCosmosDB#93 from schjan/main
Support multiple id fields per entity
2 parents fde0479 + b524668 commit 9856d71

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

Interfaces/Cosmos.DataTransfer.Interfaces/DataItemExtensions.cs

+12-2
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,25 @@ public static class DataItemExtensions
1818

1919
var fields = source.GetFieldNames().ToList();
2020
var item = new ExpandoObject();
21-
if (requireStringId && !fields.Contains("id", StringComparer.CurrentCultureIgnoreCase))
21+
22+
/*
23+
* If the item contains a lowercase id field, we can take it as is.
24+
* If we have an uppercase Id or ID field, but no lowercase id, we will rename it to id.
25+
* Then it can be used i.e. as CosmosDB primary key, when `requireStringId` is set to true.
26+
*/
27+
var containsLowercaseIdField = fields.Contains("id", StringComparer.CurrentCulture);
28+
var containsAnyIdField = fields.Contains("id", StringComparer.CurrentCultureIgnoreCase);
29+
30+
if (requireStringId && !containsAnyIdField)
2231
{
2332
item.TryAdd("id", Guid.NewGuid().ToString());
2433
}
34+
2535
foreach (string field in fields)
2636
{
2737
object? value = source.GetValue(field);
2838
var fieldName = field;
29-
if (string.Equals(field, "id", StringComparison.CurrentCultureIgnoreCase) && requireStringId)
39+
if (string.Equals(field, "id", StringComparison.CurrentCultureIgnoreCase) && requireStringId && !containsLowercaseIdField)
3040
{
3141
value = value?.ToString();
3242
fieldName = "id";

0 commit comments

Comments
 (0)