#c# #asp.net #asp.net-mvc #asp.net-identity
Вопрос:
Я использую Asp.Net Модели идентификации MVC. Когда я пытаюсь обновить существующего пользователя, это выдает следующую ошибку:
Экземпляр сущности типа «Клиент» не может быть отслежен, поскольку другой экземпляр с тем же значением ключа для {‘Id’} уже отслеживается. При присоединении существующих сущностей убедитесь, что присоединен только один экземпляр сущности с заданным значением ключа. Рассмотрите возможность использования DbContextOptionsBuilder.Позволяет «Чувствительному ведению журнала» видеть конфликтующие ключевые значения.
[HttpPost]
public async Task<IActionResult> Create([FromBody] OrderIDTO orderIDTO)
{
try
{
var pickUp = await _unitOfWork.Addresses.Get(o => o.AddressId == orderIDTO.PickUpAddressId, new List<string> { "Customer" });
if (pickUp != null)
{
var order = _mapper.Map<Order>(orderIDTO);
var cabs = await _unitOfWork.CabShifts.GetAll(r => r.IsCurrentlyOccupied == false amp;amp; r.City == pickUp.City amp;amp; r.ShiftDate.Date == today.Date, null,
new List<string> { "Cab" , "Driver" });
if (cabs.Count != 0)
{
var cab = cabs.FirstOrDefault();
order.CabShiftId = cab.CabId;
await _userManager.UpdateAsync(pickUp.Customer);
await _unitOfWork.Orders.Insert(order);
await _unitOfWork.Save();
return Ok();
}
else
return Conflict("No cabs available now in your area.");
}
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
Мои конфигурации идентификации:
public static class ServiceExtensions
{
public static void ConfigureIdentity(this IServiceCollection services)
{
var builder = services.AddIdentityCore<Customer>(q => { q.User.RequireUniqueEmail = true; });
builder = new IdentityBuilder(builder.UserType, typeof(IdentityRole), services);
builder.AddEntityFrameworkStores<DataAccessContext>().AddDefaultTokenProviders();
}
}
В процессе запуска:
services.ConfigureIdentity();
services.AddTransient<IUnitOfWork, UnitOfWork>();
Комментарии:
1. Поскольку вы используете единицу работы, вам невозможно помочь, если вы не выложите весь код целиком. Подумайте о том, чтобы избавиться от UoW. Видишь gunnarpeipman.com/ef-core-repository-unit-of-work