Это действительно одна из самых странных проблем, с которыми я столкнулся.
У меня есть веб-API, который использует EF. У меня есть таблица аудита, которая принимает ApplicationUser. Я создаю новый объект, добавляю его в коллекцию и затем вызываю SaveChangesAsync (). Странная часть, я получаю «Имя пользователя MyUserName уже занято». ошибка.
using (var context = new ApplicationDbContext())
{
var user = context.Users.Single<ApplicationUser>(x => x.UserName == model.UserName);
var sid = context.SessionIds.FirstOrDefault(x => x.Id == model.SessionId);
var audit = new Audit
{
Data = model.Data,
User = user,
IpAddress = Helper.GetClientIp(Request),
Session = sid != null ? sid : ItsMyChance.Entities.Entities.SessionId.Create(scoreModel.UserName, scoreModel.GameId)
};
context.Audits.Add(audit);
await context.SaveChangesAsync();
}
Обновление
Этот код работает годами. Разница в том, что я обновляюсь с .NET 4.5 до .NET 4.61
Обновление 2
Я также попробовал следующее, но все еще получаю ту же ошибку
[ForeignKey("User")]
public string UserId { get; set; }
public ApplicationUser User { get; set; }
Обновление 3
Пытаясь отследить эту проблему, я вызываю
var entries = context.ChangeTracker.Entries();
Возвращает несколько записей, по 1 для каждого объекта, включая пользователя. Пользователь показывает Добавлено и еще одно как Без изменений. Я не могу понять, как это происходит.
Кроме того, я добавил следующее, прежде чем вносить какие-либо изменения, но эффекта нет.
context.Configuration.AutoDetectChangesEnabled = false;