• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Edycja obiektu - The instance of entity type 'Employee' cannot be tracked because another...

Object Storage Arubacloud
0 głosów
510 wizyt
pytanie zadane 16 maja 2021 w C# przez OlekS Początkujący (280 p.)

Witam, mam problem z edycją obiektu "Employee".

public void Edit(int id, Employee employee)
{
            var oldEmployee = _context.Employees.SingleOrDefault(x => x.Id == id);

            if(employee.Picture == null)
            {
                employee.Picture = oldEmployee.Picture;
            }

            employee.DateAdded = oldEmployee.DateAdded;

            _context.Employees.Update(employee);
            _context.SaveChanges();
 }

Błąd: The instance of entity type 'Employee' cannot be tracked because another instance with the same key value for {'Id'} is already being tracked. When attaching existing entities, ensure that only one entity instance with a given key value is attached.

Nie mam pomysłu jak to obejść.

1 odpowiedź

0 głosów
odpowiedź 16 maja 2021 przez Wiciorny Ekspert (269,710 p.)

Nie pisze w C#, ale jako programista zastanawia mnie czasem, czemu ludzie gubią myślenie i "klepią kod" na zasadzie kopiuj wklej, albo automatycznego klepania ... metod i zmiennych bez  jakiejkolwiek ingerencji, czy próby zrozumienia. 
Wystarczy wejść w dokumentacje, przeczytać o danej metodzie ... i masz odp. 
 

SingleOrDefault<TSource>(IEnumerable<TSource>)

Zwraca jedyny element sekwencji lub wartość domyślną, jeśli sekwencja jest pusta. Ta metoda zgłasza wyjątek, jeśli w sekwencji występuje więcej niż jeden element.

Więc teraz coś robisz nie tak, zresztą aktualizujesz obiekt, przepinając referencje wcześniej. Robiąc 2 referencje do 1 egzemplarza .
I nie pisze tego w złej wierze, po prostu jak korzystasz z czegos zewnętrznego, to zwykle potencjalnie rodzi problem, bo jak nie wiesz co  "coś" ma w srodku to moze byc wszystko 
https://docs.microsoft.com/pl-pl/dotnet/api/system.linq.enumerable.singleordefault?view=net-5.0 ..  

komentarz 16 maja 2021 przez OlekS Początkujący (280 p.)
Ogólnie to chciałem zrobić tak że jeśli obiekt Employees nie posiada ustawionego "Picture" który jest byte[] to ma wsiąść go ze starszej wersji jeśli tam został ustawiony.

Podobne pytania

0 głosów
1 odpowiedź 419 wizyt
0 głosów
2 odpowiedzi 305 wizyt

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...