Нарушение ограничения первичного ключа дубликат ключа - PullRequest
0 голосов
/ 27 ноября 2018

При запуске моих тестов для вставки учетной записи я сталкиваюсь с ошибкой:

"Нарушение ограничения PRIMARY KEY 'PK_dbo.Accounts'. Невозможно вставить дубликат ключа в объект 'dbo.Accounts'."

Мне известно, что я вставляю дубликат, но я не могу понять, как это решить.Я уже пытался использовать scope_identity, но я не уверен, правильно ли я его использую.

PS: я не могу изменить базу данных.

 private static SqlCommand CreateInsertCommand(Account account, SqlConnection connection)
    {

        string insertStatement =
            "SET IDENTITY_INSERT Accounts ON " +
            "INSERT INTO Accounts " +
            "(Id, AccountNumber, Balance, AccountType, CustomerId) " +
            "VALUES (@Id, @AccountNumber, @Balance, @AccountType, @CustomerId) " +
            "SELECT SCOPE_IDENTITY() " + // gets id from inserted account
            "SET IDENTITY_INSERT Accounts OFF";

        SqlCommand insertCommand = new SqlCommand(insertStatement, connection);

        if (account.Id == 0)
        {
            insertCommand.Parameters.AddWithValue("@Id", account.Id);
        }

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

IDENTITY_INSERT позволяет указать значение для поля, которое обычно генерируется автоматически.Он не позволяет создавать дубликаты.

Вам сначала нужно удалить дубликат, а затем использовать IDENTITY_INSERT, чтобы указать желаемое значение, или просто отредактировать существующую строку.

0 голосов
/ 27 ноября 2018

Возможно, вы просто хотите update?

update accounts
    set AccountNumber = @AccountNumber,
        Balance = @Balance,
        AccountType = @AccountType,
        CustomerId = @CustomerId
    where id = @id;
...