Aktualizacja danych w bazie po edycji DataGridView (EntityFramework)

0

Tworzę aplikacją operującą na bazie danych sql i napotkałem pewien problem.
Otóż w jaki sposób zapisać wprowadzone zmiany w kontrolce DataGridView do bazy? (po naciśnięciu przycisku lub automatycznie)
Szukałem w sieci rozwiązań, jednak nie trafiają one w sedno problemu, są przestarzałe, lub nie do końca je rozumiem. Proszę o nakierunkowanie do rowziązania. (korzystam z entity framework). Oto kod:

 public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }

        private void MainForm_Load(object sender, EventArgs e)
        {
            using (CarDealerEntities context = new CarDealerEntities())
            {
                this.dataGridViewUsers.DataSource = context.Users.ToList();
                this.dataGridViewCustomers.DataSource = context.Customers.ToList();
                this.dataGridViewOrders.DataSource = context.Orders.ToList();
                this.dataGridViewAddresses.DataSource = context.Addresses.ToList();
            }
        }

        private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {

        }

        private void buttonSave_Click(object sender, EventArgs e)
        {
            
        }
    } 
0

Podejrzewam, że muszę stworzyć event który będzie:
a) sprawdzał które wiersze są nowe, a które już istniały
b) stworzy obiekt na podstawie wartości każdej komórki wiersza
c) doda go do encji
d) zaktualizuje obiekt kontekstu

Jednak tutaj rodzi się wiele problemów.. Po pierwsze dla każdej tabeli takie zdarzenie musiałoby być inne (różne obiekty encji), po drugie jak sprawdzić które wiersze są nowopowstałe, po trzecie zczytywanie każdej komórki kazdego wiersza i chwilowe przetrzymywanie go w zmiennej będzie dość problematyczne

0

Nie jest to trywialne zadanie. Rozwiązywałem kiedyś podobny problem, ale z NHibernate (było to w okolicach lat 2009-2010).
W skrócie:

  1. Miałem własną implementację BindingList<T>, która przechowywała informacje o dodanych, edytowanych i usuniętych rekordach,
  2. Miałem wspólną klasę ModelBase dla wszystkich modeli, która była INotifyPropertyChanging, INotifyPropertyChanged, IDataErrorInfo.
  3. Przycisk Save, który pobierał dane z tej listy i wykonywał aktualizacje na bazie danych poprzez Repository<T>.

Powodzenia.

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