Обновление вложенных коллекций одним автоматом - PullRequest
0 голосов
/ 05 июня 2019
        configuration.CreateMap<TpmProject, TpmProjectEditDto>();
        configuration.CreateMap<TpmProjectEditDto, TpmProject>();

        configuration.CreateMap<TpmProjectClassLink, TpmProjectClassLinkDto>();
        configuration.CreateMap<TpmProjectClassLinkDto, TpmProjectClassLink>();

        configuration.CreateMap<TpmProjectContactLink, TpmProjectContactLinkDto>();
        configuration.CreateMap<TpmProjectContactLinkDto, TpmProjectContactLink>();

public partial class TpmProject : FullAuditedEntity<long, User>
    {
        public string Name { get; set; }

        public virtual ICollection<TpmProjectContactLink> TpmProjectContactLink { get; set; }

        public virtual ICollection<TpmProjectClassLink> TpmProjectClassLink { get; set; }

    }
public class TpmProjectEditDto : : FullAuditedEntity<long?, User>
    {

        public string Name { get; set; }

        public ICollection<TpmProjectContactLinkDto> TpmProjectContactLink { get; set; }

        public ICollection<TpmProjectClassLinkDto> TpmProjectClassLink { get; set; }

    }
}
public class TpmProjectClassLink: FullAuditedEntity<long, User>
{
    public string baseClassNo { get; set; }

    public string name { get; set; }

    public virtual long? TpmProjectId { get; set; }

    [ForeignKey("TpmProjectId")]
    public virtual TpmProject TpmProject { get; set; }

}
public class TpmProjectClassLinkDto : FullAuditedEntity<long, User>
{

    public string baseClassNo { get; set; }

    public string name { get; set; }

    public virtual long? TpmProjectId { get; set; }

}
public partial class TpmProjectContactLink: FullAuditedEntity<long, User>
{

    public string Name { get; set; }

    public virtual long? TpmProjectId { get; set; }

    [ForeignKey("TpmProjectId")]
    public virtual TpmProject TpmProject { get; set; }
}
public partial class TpmProjectContactLinkDto : FullAuditedEntity<long,User>
{
    public string Name { get; set; }

    public virtual long? TpmProjectId { get; set; }

}

это метод обновления

[UnitOfWork(IsDisabled = true)]
    protected virtual async Task Update(TpmProjectEditDto input)
    {
        var entity = await _entityRepository.GetAllIncluding(t=>t.TpmProjectContactLink,t=>t.TpmProjectClassLink,t => t.TpmProjectErrorLink).Where(t => t.Id == input.Id).SingleOrDefaultAsync();
        entity.TpmProjectClassLink.Clear();
        entity.TpmProjectContactLink.Clear();
        await CurrentUnitOfWork.SaveChangesAsync();
        ObjectMapper.Map(input, entity);
        await _entityRepository.UpdateAsync(entity);
    }

ошибка выброса

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

как изменить мой код для обновления одного ко многим

...