У меня есть пользователи ASP.NET Core Identity, представленные следующим (упрощенным) классом:
Код: Выделить всё
public class User : IdentityUser
{
public int? CompanyId { get; set; }
public virtual Company? Company { get; set; }
// Other properties removed for clarity
}
Код: Выделить всё
public class Company
{
public int Id { get; set; }
public virtual ObservableCollection Users { get; set; } = [];
}
Классы DTO в основном отражают сущности, поэтому я не будут показывать их здесь.
Моя конфигурация картографа следующая...
Код: Выделить всё
public class AutoMapperProfile : Profile
{
public AutoMapperProfile()
{
CreateMap()
.ReverseMap();
CreateMap()
.ReverseMap()
// Next three rules to account for Identity storing the email four times
.ForPath(entity => entity.NormalizedEmail, opt => opt.MapFrom(dto => dto.Email.ToUpper()))
.ForPath(entity => entity.UserName, opt => opt.MapFrom(dto => dto.Email))
.ForPath(entity => entity.NormalizedUserName, opt => opt.MapFrom(dto => dto.Email.ToUpper()));
}
}
Код: Выделить всё
public async Task SaveCompany(CompanyDto company)
{
if (company.Id == 0)
{
context.Companies.Add(mapper.Map(company));
}
else
{
Company? dbCompany = await context.Companies
.Include(c => c.Users)
.SingleOrDefaultAsync(c => c.Id == company.Id);
if (dbCompany is not null)
{
mapper.Map(company, dbCompany);
foreach (UserDto user in company.Users)
{
User? dbUser = dbCompany.Users.SingleOrDefault(u => u.Id == user.ID);
if (dbUser is null)
{
dbCompany.Users.Add(mapper.Map(user));
}
else
{
mapper.Map(user, dbUser);
}
context.Companies.Update(dbCompany);
}
}
}
await context.SaveChangesAsync();
}
Экземпляр типа сущности «Пользователь» невозможно отследить, поскольку другой экземпляр с тем же значением ключа для {'Id'} уже отслеживается. При присоединении существующих сущностей убедитесь, что присоединен только один экземпляр сущности с заданным значением ключа.
Это происходит, даже если в компании ничего не изменилось, или о пользователях, связанных с ним.
Кто-нибудь может объяснить, что я делаю неправильно? Спасибо
Подробнее здесь: https://stackoverflow.com/questions/792 ... automapper
Мобильная версия