SqlBulkCopy не удается сохранить записи с ошибкой «Указанное ColumnMapping не соответствует ни одному столбцу в источникC#

Место общения программистов C#
Ответить
Anonymous
 SqlBulkCopy не удается сохранить записи с ошибкой «Указанное ColumnMapping не соответствует ни одному столбцу в источник

Сообщение Anonymous »

У меня есть таблица, определённая следующим образом:

Код: Выделить всё

CREATE TABLE [staging].[tbPositionAssetIdentifier]
(
[StageID] [int] IDENTITY(1,1) NOT NULL,
[AssetId] [nvarchar](50) NULL,
[SecurityDescription] [nvarchar](max) NULL,
[Sedol] [nvarchar](50) NULL,
[isin] [nvarchar](50) NULL,
[secTicker] [nvarchar](50) NULL,
[secType] [nvarchar](50) NULL,

PRIMARY KEY CLUSTERED ([StageID] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
И у меня для этого определен класс:

Код: Выделить всё

public class AssetData
{
[JsonPropertyName("assetId")]
public string? AssetID { get; set; }

[JsonPropertyName("secDesc1")]
public string? SecurityDescription { get; set; }

[JsonPropertyName("sedol")]
public string? Sedol { get; set; }

[JsonPropertyName("secTicker")]
public string? secTicker { get; set; }

[JsonPropertyName("isin")]
public string? isin { get; set; }

[JsonPropertyName("secType")]
public string? secType { get; set; }
}
Я пытаюсь сохранить список AssetData в таблице базы данных tbPositionAssetIdentifier с помощью SqlBulkCopy, как показано ниже, но это не удается с исключением.

Данное сопоставление столбцов не совпадает ни с одним столбцом в источнике или назначении

Код:

Код: Выделить всё

public static async Task SaveToDBAsync(
List records,
string connectionString,
string tableName)
{
if (records == null || records.Count == 0)
return;

var entityType = typeof(T);
var properties = entityType.GetProperties(BindingFlags.Public | BindingFlags.Instance)
.Where(p => p.CanRead)
.ToList();

using var connection = new SqlConnection(connectionString);

await connection.OpenAsync();
using var bulkCopy = new SqlBulkCopy(connection);

bulkCopy.DestinationTableName = tableName;

var dataTable = new DataTable();

foreach (var property in properties)
{
bulkCopy.ColumnMappings.Add(property.Name, property.Name);
dataTable.Columns.Add(property.Name, property.PropertyType);
}

foreach (var record in records)
{
var row = dataTable.NewRow();

foreach (var property in properties)
{
row[property.Name] = property.GetValue(record) ?? DBNull.Value;
}

dataTable.Rows.Add(row);
}

await bulkCopy.WriteToServerAsync(dataTable);
}
Это исключение возникает из-за того, что у меня есть столбец PK с приращением идентификатора в таблице, где, как и в классе (или модели), у меня нет этого столбца, почему происходит несоответствие столбца?
Может кто-нибудь помочь мне, почему он не работает и какое решение для этого? Любая помощь или любой совет будут оценены по достоинству. Заранее спасибо

Подробнее здесь: https://stackoverflow.com/questions/798 ... mapping-do
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»