Я уверен, что об этом спрашивали раньше, я не знаю, что искать, поэтому, возможно, это дубликат.У меня есть код, который добавляет новый объект в базу данных.Эта сущность имеет ссылку на другую сущность (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();
}