ef core присоединяет один и тот же объект несколько раз - PullRequest
0 голосов
/ 30 января 2019

Я уверен, что об этом спрашивали раньше, я не знаю, что искать, поэтому, возможно, это дубликат.У меня есть код, который добавляет новый объект в базу данных.Эта сущность имеет ссылку на другую сущность (Role), и я получаю ее через службу.Служба создает еще один экземпляр dbContext, поэтому мне нужно прикрепить роль к контексту после ее получения.Проблема в том, что, когда я пытаюсь присоединить две одинаковые роли, я получаю следующее исключение:

«Роль» не может быть отслежена, поскольку другой экземпляр с таким же значением ключа для {'Id'} уже используетсяотслеживаются.При подключении существующих объектов убедитесь, что подключен только один экземпляр объекта с данным значением ключа.Подумайте об использовании DbContextOptionsBuilder.EnableSensitiveDataLogging, чтобы увидеть конфликтующие значения ключа.

Как мне это сделать?Код ниже:

using (var context = new TenantContext(schemaName, connectionString))
{
    ApprovalTemplates templates = new ApprovalTemplates();
    ApprovalTemplate template = new ApprovalTemplate();
    template.Approvers = new List<StageTemplate>();

    foreach (var stage in request.Stages)
    {
        var temp = new StageTemplate();
        temp.Order = stage.Order;
        temp.Name = stage.Name;
        var role = roleService.GetById(stage.RoleId, schemaName);//here I get the role
        temp.AvailableActions = new List<ApprovalActionTemplate>();

        foreach (var actionId in stage.Actions)
            temp.AvailableActions.Add(context.ApprovalActions.First(a => a.Id == actionId));

        //when I try to add already attached role, exception is thrown
        context.TenantRoles.Attach(role);
        temp.Role = role;
        template.Approvers.Add(temp);
    }

    templates.PRApprovalTemplate = template;
    context.ApprovalTemplates.Add(templates);
    context.SaveChanges();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...