• 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...

VPS Starter Arubacloud
0 głosów
499 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,120 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ź 410 wizyt
0 głosów
2 odpowiedzi 289 wizyt

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...