Hej, mam problem uzywajac EF6.
Zapisywanie encji szlo standardowo od controllera, az do repozytorium i zapis do DB przy uzyciu EF.
Niestety doszly do tego rozne background taski, ktore synchronizuja wiele rzeczy, w tym tez zapisuja encje do DB - tak jak tez wolaja serwisy, repo, itd.
Kod jest ogromny (w wiekszosci nie moj, teraz dorabiam te background taski) - w wielu miejscach poza repo (flow jest controller->service->repo) jest mapowanie na encje uzywane przez DB, przez co (podejrzewam) dbContext trakcuje te encje (lokalnie) - i tu pojawia sie problem - bo jak ktorys background task probuje zapisac encje, mam blad, ze encja o tym ID juz jest trackowana (sorki nie mam tego bledu pod reka)
co dziwniejszego, jak sobie przeiteruje po tym localu po ID, to jest kilka encji z tym samym ID trackowane
fixuje to w taki sposob na poziomie repo przy zapisie
foreach (var type in types)
{
var trackedEntities = applicationDbContext.Set<TypeEntity>().Local.Where(x => x.Id == type.Id).ToArray();
if (trackedEntities != null && trackedEntities.Any())
{
foreach(var e in trackedEntities)
applicationDbContext.Entry(e).State = EntityState.Detached;
}
}
ale czy tak sie powinno...?