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

0 głosów
786 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 (283,500 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ź 734 wizyt
0 głosów
2 odpowiedzi 598 wizyt

93,778 zapytań

142,737 odpowiedzi

323,388 komentarzy

63,382 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...