Entity Framework nie zapisuje zmian w bazie

0

Witam,

dopiero uczę się nowego podejścia do pracy z bazami danych jakim jest Entity Freamork

kod ma za zadanie tylko usunąć wstawiony wcześniej z poziomu Visuala obiekt o Id == 1

using (var context = new Database1Entities1())
            {
                context.Table1.Remove(context.Table1.Select(s => s).Where(i => i.Id == 1).FirstOrDefault());

                MessageBox.Show(context.Database.Connection.State.ToString());//zawsze baza jest Closed nie wiem czemu

                context.SaveChanges();

                dataGrid.ItemsSource = context.Table1.Select(s => s).ToList();//a jednak zmiany w DataGrid'zie są widoczne ale już bezpośrednio w bazie nie
            }
 

Efekt w DataGridzie jest ok (WPF):
04b07e0ab5.png
Efekt w bazie już nie (zwykły local MSSQL):
b32028385f.png

To samo jest przy dodawaniu i edycji danych. Oczywiście odświeżałem bazę i dane.

Czytałem na stackoverflow, że należy np. przy dodać coś w stylu context.Entry(obiekt).State = EntityState.Added, ale to nic nie daje.

Pozdrawiam i z góry dziękuję za pomoc.
Przemek

0

No niestety mój context nie zawiera takiej funkcji nawet, mimo że Database1Entities1() dziedziczy po DbContext. Używam najnowszej wersji Freamworka czyli 6.1.3

1
        public static SklepContext db = new SklepContext();
        

            var id = 1
            var obj = db.Table1.Find(id);
            db.Table1.Remove(obj);
            db.SaveChanges();
  1. Spróbuj statycznie ustawić klasę Context... choć z using też powinno zadziałać.
  2. Poza tym twój kod można zapisać krócej i czytelniej.
  3. U mnie na defoultowych ustawieniach EF działa(Code first). Jeśli używasz gotowej bazy danych to sprawdź w opcjach czy baza ma ustawiony status "UpdateIfNewer" - chyba tak to szło. ;)
1

Czy baza, w której sprawdzasz, to ta sama baza, na której pracuje program?

0

zmieniłem we właściwość copy na copy if never i coś drgnęło, ale raz zachodzą zmiany a raz nie. Muszę to jeszcze obczaić, ale na pewno ma to związek z tym, że jedna baza jest w solution explorer a druga w folderze Debug. I w sumie nie wiem już na której pracuję. Któraś baza po ukończeniu programu nadpisuje drugą i potem ciągle mam tą początkową bazę z paroma rekordami

0

ok, już sobie poradziłem. Trzeba ustawić we właściwościach bazy Copy if never. I ważne, każde odświeżenie bazy w Server explorer powoduje nadpisanie bazy, na której pracujesz (z folderu Debug), bazą pierwotną (z projektu). Temat do zamknięcia.

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