SqlBulkCopy 是否支持 MsSql 2017 中的图表?

Does SqlBulkCopy support Graphtables in MsSql 2017?

我正在试用新的 graphdatabase support that was added to Microsoft SQL Server 2017 我想使用 SqlBulkCopy 将几千个节点插入一个节点 table。 但是我总是错误: Column '$node_id_DB218B0EAE294E37804103CF4E82BCD2' does not allow DBNull.Value.

我的 table 是这样创建的

CREATE TABLE [Product] (
[id] bigint,
[name] nvarchar(max),
[partsNum] bigint,
[price] float) AS NODE;

CREATE TABLE [DependsOn] (
[weight] float,
[id] bigint) AS EDGE;`

我准备了一个包含所有属性的数据table,然后像这样调用 SqlBulkCopy:

using (var bulkCopy = new SqlBulkCopy(Connection, SqlBulkCopyOptions.TableLock | SqlBulkCopyOptions.FireTriggers, null)
{
    DestinationTableName = "Product"
})
{
    bulkCopy.WriteToServer(_dataTable);
}

现在我想知道我是不是做错了什么,或者这是否还不受支持。

SqlBulkCopyDataTable没有特殊处理;它将映射列以按顺序位置从源复制到目标,就像它对采用其他源的其他重载所做的那样。因此,按名称设置身份映射不是可选的:

foreach (DataColumn c in dataTable.Columns) {
    sqlBulkCopy.ColumnMappings.Add(c.ColumnName, c.ColumnName);
}

对于图表和节点表,问题比平时更明显,因为支持结构的内部列(您通常不会明确使用)出现在 start列列表,因此几乎可以保证失败。