试图将 guid 列表传递给 table

trying to pass list of guids to table

我有 table 其中列(SelectedIds)数据类型之一是 uuid 数组,我正在使用 RAW sql 插入语句传递相同的 guid,如下所示

foreach(var designHubProjectSpaceType in designHubProjectSpaceTypes)
{
    var warningJson = JsonConvert.SerializeObject(designHubProjectSpaceType.Warnings).Replace("'", "''", StringComparison.Ordinal);
    var initialObjectJson  = JsonConvert.SerializeObject(designHubProjectSpaceType.InitialObject).Replace("'", "''", StringComparison.Ordinal);
    var patchJson = JsonConvert.SerializeObject(designHubProjectSpaceType.Patches).Replace("'", "''", StringComparison.Ordinal);

    migrationBuilder.Sql($@"INSERT INTO ""DesignHubProjectSpaceTypes""(""Id"", ""ProjectNumber"", ""ExcludedIds"", ""SelectedIds"", ""IsBasedOnMaster"", ""Warnings"", ""InitialObject"", ""Patches"") "
                       + $@"VALUES ('{designHubProjectSpaceType.Id}', '{designHubProjectSpaceType.ProjectNumber}', [], '{designHubProjectSpaceType.SelectedIds.Select(a => a).ToList()}', '{designHubProjectSpaceType.IsBasedOnMaster}', 
                         '{warningJson}', '{initialObjectJson}', '{patchJson}' )");
} 

和此处 designHubProjectSpaceType.SelectedIds.Select(a => a).ToList() 有 guid 列表,这就是我要传递到 SelectedIds 列中的内容。但是当我试图查看传递的 sql 字符串时,我注意到 system.Collections.Generic.List[System.Guid] 代替了那些 guid,如下图所示

这些是 designHubProjectSpaceType.SelectedIds 持有的 guid,我不知道我哪里做错了。

任何人都可以让我知道为什么将 guid 列表作为类型传递,我正在使用 postgreSQL 作为数据库并使用 EFCore。我已经把上面的代码放在迁移文件中了。

下面是table结构

遇到这个错误'{string.Join(',', selectedIds)}'

代码的问题在于,它是通过字符串插值隐式调用 ToString() 来将列表转换为字符串。查看此示例:

Guid[] selectedIds = new Guid[]{
    Guid.NewGuid(),
    Guid.NewGuid()
};

string error = $@"'{selectedIds.Select(a => a).ToList()}'";
Console.WriteLine($"Error: {error}");

// Tweak the following string interpolations according to the target SQL syntax you needed.

// Join string with single quotes
string correct = $@"'{{{string.Join(',', selectedIds)}}}'";
Console.WriteLine($"Format 1: {correct}");

// Putting `{}` over uuid, and adding the list into a `[]`:
string correct2 = $@"'[{string.Join(',', selectedIds.Select(id => "{" + id + "}"))}]'";
Console.WriteLine($"Format 2: {correct2}");

输出:

Error: 'System.Collections.Generic.List`1[System.Guid]'
Format 1: '{5e4b44c2-f087-44db-98b0-95da1ae20ed7,1153d836-baee-4ba4-85f1-6f0c08934135}'
Format 2: '[{5e4b44c2-f087-44db-98b0-95da1ae20ed7},{1153d836-baee-4ba4-85f1-6f0c08934135}]'

另一方面,如果您输出 sql 您要发送到控制台或记录以进行调试可能会更容易。