Insert czy Update przez Entity Framework

0

Czy to jest dobrze napisane?

private void button1_Click(object sender, EventArgs e)
        {
            using (JPKContext db = new JPKContext())
            {
                Model.JPK_Podmiot Podmiot = new Model.JPK_Podmiot();
                // Podmiot.ID = 1;
                Podmiot.Nip = textBox1.Text.ToString();
                Podmiot.Regon = textBox2.Text.ToString();
                Podmiot.Nazwa = textBox3.Text.ToString();

                Model.JPK_Podmiot podmioty_istniejace = db.Podmioty.FirstOrDefault();
                if (podmioty_istniejace == null)
                {
                    db.Podmioty.Add(Podmiot);
                }
                else
                {
                    podmioty_istniejace.Nip = textBox1.Text.ToString();
                    podmioty_istniejace.Regon = textBox2.Text.ToString();
                    podmioty_istniejace.Nazwa = textBox3.Text.ToString();

                    db.Entry(podmioty_istniejace).State = EntityState.Modified;
                }
                db.SaveChanges();
            }
            this.Close();
        }

Probowalem zrobic:

podmioty_istniejace = Podmiot; 

ale wywala blad, ze oryginalny rekord juz nieistnieje.

0

Pośrednio to nie meritum sprawy ale na pewno nie musisz robić tak: textBox1.Text.ToString() gdyż własność Text jest już stringiem.

PS: W EF tyle trzeba się namęczyć żeby zrobić update? NH jednak jest prostsze :P

0

Ale co Ty chcesz osiągnąć? Mieć tabelę z jednym tylko rekordem i go wiecznie updatować?

0
[RafalKan napisał]

Chcialem napisac funkcje, ktora -> jesli tabela jest pusta to wstawi nowy rekord a jesli w tabeli jest juz rekord to go zaktualizuje.

Czyli jeden rekord w tabeli.

Neka mnie to, ze w mojej funkcji, ktora dziala, musze wypelniac 2 DBset. Tak jakbym w procedurze sql robil 2 razy to samo oddzielnie dla insert i update.

No, a jak niby się pisze procedury SQL?

Wg mnie powinno to wygladac tak, ze 1 raz wypelniam jakis caly DBset oprocz ID i tylko sprawdzam czy ID istnieje w bazie i w zaleznosci od tego robie update lub insert tego juz wypelnionego 1 raz DBset

Chyba nie do końca łapiesz koncepcję ID.

I mam jeszcze takie pytanie. Jak dziala ID w MSSQL? Utworzylem w EF tabele, ID utworzylo sie autoincrement i ok. Ale jak wstawie 5 rekordow a potem wyczyszcze tabele calkowicie a nastepnie robie INSERT to w bazie pokazuje sie nowy, pierwszy rekord z ID = 6. Nawet jak proboje nadpisac dla pustej tabeli ID = 1 (w moim programie wykomentowane) to i tak nadaje mi kolejne ID.

Czyli działa prawidłowo.
ID nie służy do numerowania danych dla użytkownika lecz dla bazy.

0

no to trunkejt

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