Невозможно вставить явное значение для столбца идентификаторов в таблице 'xxx', когда для IDENTITY_INSERT установлено значение OF - PullRequest
0 голосов
/ 24 октября 2019

Я проверил все темы по этой ошибке с правой рамкой, но не могу найти свою проблему.

Я использую ядро ​​entityframework.

У меня есть достижение и группа критериев в выполнениикласс.

Когда я впервые сохраняю выполнение, все работает.

Затем, когда я хочу обновить его, я выдал ошибку "Невозможно вставить явное значение для столбца идентификаторов в таблице CriteriaGroups .. .

 "name": "Accomplishment1",
    "criteriaGroupId": 4,
    "categories": [],
    "criteriaGroupFk": {
        "gOperator": 0,
        "criterias": [],
        "groups": [],
        "id": 4
    },
    "id": 2
}

Классовая модель выполнения:

[Table("Accomplishments")]
public class Accomplishment : AuditedEntity 
{

    [Required]
    public virtual string Name { get; set; }

    public virtual int? CriteriaGroupId { get; set; }

    [ForeignKey("CriteriaGroupId")]
    public CriteriaGroup CriteriaGroupFk { get; set; }

    public List<Category> Categories { get; set; }

}

Класс для группы критериев следующий:

    [Table("CriteriaGroups")]
public class CriteriaGroup : CreationAuditedEntity 
{

    public virtual GroupOperator GOperator { get; set; }

    public List<Criteria> Criterias { get; set; }

    public List<CriteriaGroup> Groups { get; set; }
}

В моем коде я вижучто это идет, чтобы обновить объект выполнения. Но я думаю, что entityframework видит группу критериев как новую, даже если у нее есть идентификатор.

Что с ней не так?

Я борюсь с 2 дня наэто.

private async Task Update(CreateOrEditAccomplishmentDto input)
     {
        var accomplishment = await _accomplishmentRepository.FirstOrDefaultAsync((int)input.Id);
         ObjectMapper.Map(input, accomplishment);
         await CurrentUnitOfWork.SaveChangesAsync();
     }

1 Ответ

0 голосов
/ 24 октября 2019

Убедитесь, что CriteriaGroup не перезаписан неотслеживаемым объектом, потому что в этом случае CriteriaGroup считается новым.

Описанная проблема может возникнуть, если, например, вы не загрузите связанный CriteriaGroupFk при загрузке Accomplishment и последующем назначении неотслеживаемого объекта CriteriaGroupFk. Для решения проблемы вы можете использовать Включить , например:

var accomplishment = await _accomplishmentRepository.Include(x => x.CriteriaGroupFk).FirstOrDefaultAsync((int)input.Id);

См. Загрузка связанных данных и Отслеживание по сравнению с запросами без отслеживания для дальнейшей информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...