zmiana wartosci klucza obcego

0

Witam!

Potrzebuje zmienić wartość klucza obcego w tabeli, podczas gdy na formatce, na której chce to zrobić edytowana jest tez inna tabela. Sprawa wygląda tak, mam formatke, gdzie dodaje kolejne pozycje historii na temat przekazywania sprzetu. Integralną częścia tej historii jest przekazywanie sperzętu z jednego do innego magazynu. W tym celu edytowana jest tabela Przekazania, ale w pewnym momencie(po zmianie statusu przekazania) w tabeli Sprzęt trzeba zmienić pole o nazwie idMagazynu(klucz obcy do tabeli Magazyny w tabeli Sprzęt), gdzie musi się pojawić idMagazynu do którego jest sprzęt przekazywany. Mój kod wygląda tak:

if (comboBoxStatusPrzekazania.Text == "Zaakceptowano")
            {
                dateTimePickerDataAkceptacji.Text = DateTime.Today.ToString();
                dateTimePickerDataOdrzucenia.Text = null;

                Sprzet sprzetPrzekazywany;
                sprzetPrzekazywany.Magazyny.id = int.Parse(textBoxNumerMagazynuDocelowego.Text);   //tu wywala błąd, bo nie mozna modyfikowac pola id w tabeli Magazyny bo jest autoincrement

            }
            else
            {
                comboBoxStatusPrzekazania.Text = "Odrzucono";
                dateTimePickerDataAkceptacji.Text = null;
                dateTimePickerDataOdrzucenia.Text = DateTime.Today.ToString();
            }

            Przekazania przekazanie = new Przekazania();

            wpiszDaneDoBazy(przekazanie);
            bazaBudSystem.AddToPrzekazania(przekazanie); //obsługa tabeli która jest edytowana na formatce
            bazaBudSystem.SaveChanges(); 

Jeśli macie jakies pomysły to bardzo proszę o podzielenie się nimi, bo w żaden sposób nie udało mi się tego jeszcze rozwiązać.

0

A .net sam wie skąd wyczarować obiekt sprzetPrzekazywany?
Podstawy programowania:
Deklaracja obiektu - Sprzet sprzetPrzekazywany;
Po zadeklarowaniu nie ma jeszcze czego używać, bo obiekt nie jest stworzony (zainicjalizowany) w pamięci.
Musisz stworzyć lub skądś pobrać instancję typu Sprzet.
Wiesz jakiego sprzętu dotyczy edycja, więc najpierw pobierasz jego obiekt po id. Dopiero jak masz obiekt modyfikujesz id magazynu do którego jest przypisany i zapisujesz.
Sam powiedziałeś że musisz zmodyfikować id magazynu do którego przypisany jest sprzęt. Widać że nie masz pojęcia o bazach danych i relacjach.
Bo jak można nazwać ten kawałek kodu sprzetPrzekazywany.Magazyny.id = int.Parse(textBoxNumerMagazynuDocelowego.Text) jeśli nie głupotom. Tu chcesz zmienić id magazynu, a nie id magazynu do którego przypięty jest sprzęt. Pewnie coś takiego sprzetPrzekazywany.MagazynId jest polem, które chcesz zmodyfikować, czyli klucz obcy w tabeli Sprzęty, a nie klucz główny w tabeli Magazyny!

p.s. temat do newbie!

0

Zdroworozsądkowo, wiem że powinno być własnie tak:

Sprzet sprzetPrzekazywany = new Sprzet();
                int idSprzetu = int.Parse(textBoxNumerSprzetu.Text);
                    var sprzetZmodyfikowany =
                    (
                    from sprzet in bazaBudSystem.Sprzet
                    where sprzet.id == idSprzetu
                    select sprzet
                    ).AsEnumerable().First();
                sprzetPrzekazywany.idMagazynu = int.Parse(textBoxNumerMagazynuDocelowego.Text);

bo interesuje mnie zmiana wartości idMAgazynu w tabeli sprzęt, ale napisałem tak jak wcześniej, tylko dlatego że nie mam bezpośredniego dostępu do klucza obcego (w tym wypadku własnie idMagazynu z tabeli Sprzęt), i co za tym idzie VS czegoś takiego j/w nie przyjmuje.

P.S. Znam działanie baz danych, i podstawy programowania, tyle że są czasami takie zapisy, które na zdrowy rozum nie zawierają w sobie żadnej logiki, a które tu wklejam, aby jeszcze bardziej zobrazować to w czym tkwi problem.

1

To pewnie obiekt typu Sprzęt ma pole typu Magazyn, które reprezentuje rekord z tabeli magazynów, więc w tabeli magazyny wyszukaj ten o nowych id i w obiekcie Sprzęt podmień cały ten obiekt, EF powinien podmienić tylko klucz obcy.
Jeśli to co napisałem jest nieprawdą to wklej definicję klas Sprzęt i Magazyn, bo inaczej to już nie dojdę jak to u ciebie jest mapowane.

0

Dokładnie tak, stworzyłem nowy obiekt typu Magazyn i podmieniłem go z polem Magazyn w obiekcie Sprzęt.

Dzieki WIELKIE za pomoc i cierpliwość ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1