Aktualizacja danych w bazie po edycji DataGridView (EntityFramework)

Odpowiedz Nowy wątek
Wybitny Samiec
2016-02-28 17:10
Wybitny Samiec
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)
        {

        }
    } 

Pozostało 580 znaków

Wybitny Samiec
2016-02-28 18:57
Wybitny Samiec
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

Pozostało 580 znaków

2016-02-28 20:14

Rejestracja: 4 lata temu

Ostatnio: 3 lata temu

Lokalizacja: Wrocław

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.

Pozostało 580 znaków

Odpowiedz

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