Невозможно удалить запись из таблицы со столбцом Identity

У меня есть таблица с кодом в качестве первичного ключа вместо идентификатора. Когда я вызываю метод DeleteAsync, я получаю исключение Message = "Cannot update identity column 'Id'.".

[Table("Test")]

public class Test: FullAuditedEntity<int>

{

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
new public int Id { get; set; }
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public virtual int Code { get; set; }

public async Task DeleteTest(int code)
    {


        try
        {
            await _supplierRepository.DeleteAsync(p => p.Code== code);
        }
        catch (Exception ex)
        {

        }
    }

Но если я удалю столбец Id из таблицы, он будет работать нормально. Я хочу, чтобы столбец Id и столбец Code были ПК.


person vivek nuna    schedule 12.09.2017    source источник


Ответы (2)


Что происходит, так это то, что FullAuditedEntity<int> автоматически создает поле Id с целым числом. Вам не нужно делать это:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
new public int Id { get; set; }

Если вы хотите создать таблицу с составным ключом, просто добавьте поле кода без дублирования поля идентификатора. Тогда у вас не будет проблем.

person Sleek    schedule 13.09.2017

Рекомендуется использовать Id в качестве PK и сделать другие столбцы уникальным ограничением. Поэтому, если вы используете Id в качестве PK, вы не столкнетесь с такими проблемами.

person vivek nuna    schedule 26.09.2017