Hej.
Mam do Was pytanie. Czy da się zrobić update obiektu w bazie danych? Chciałem zrobić coś takiego, że operuje na obiektach bazy danych, ale chciałbym zrobić coś takiego, że całą bazę zapisuję do kolekcji, działam sobie coś na niej i później wgrywam z kolekcji do bazy? Chodzi mi o to by "prowizorycznie" zrobić operację update ale na całej tabeli na raz. Czy jest to możliwe?
No generalnie na tym opiera się pewnie z 90% aplikacji webowych napisanych w .NET
EntityFramework / Dapper / nHibernate / ADO.NET /
Jest na to jakaś wbudowana funkcja albo jakiś schemat? przyznam szczerze że interesuje mnie update całej tabeli a nie pojedynczego elementu, dlatego chcialbym to robic hurtowo. Może mi ktoś coś poradzić?
Napisz coś więcej o Twoim zagadnieniu bo to wygląda jakbyś rozwiązywać jakiś problem w dziwny sposób.
EntityFramework EF domyślnie śledzi zmiany w aktywnej sesji I. Jak coś odbierzesz z bazy i pozmieniasz to na koniec SaveChanges zapisze wszystkie zmiany ale to jest nieco dziwne podejście. Zobacz przykłady z EF.
Zależy jak bardzo hurtowo.
Jeżeli są to tysiące obiektów, to jak dobrze pamiętam - SqlBulkCopy
Ewentualnie możesz używać też czystego sqla w tym c#.
Eryk17 napisał(a):
Czy da się zrobić update obiektu w bazie danych? [...] Czy jest to możliwe?
Tak, da się
Zależy jak rozumieć "obiekt w bazie danych". Według nomenklatury Microsoftu, tabela jest obiektem, ale tabel nie można updatować, jedynie alterować.
Jeśli zaś chodzi o update, to najprościej chyba skorzystać z pierwszych wyników z Google, np.: https://www.aspsnippets.com/Articles/ExecuteNonQuery-Insert-Update-and-Delete-examples-in-C-and-VBNet.aspx
Mam na myśli przypadek w którym Tworzę prostą klasę np. samochód metodą First Code, następnie dodaje kontroler z akcjami Entity Framework który daje mi CRUD dla danej klasy i tworzę obiekty. Następnie zapisuje te obiekty jako kopie np. w kolekcji albo liście a potem podmieniam je do oryginalnej tabeli gdyby te z oryginalnej się zmieniły. Elementów nie powinno być więcej niż kilkadziesiąt.
@Edit: nie wyjaśniłem po co - chciałem zrobić tzw ustawienia użytkownika, czyli klasę która zawiera jakieś ustawienia. Pod wpływem czasu te ustawenia mogą zmieniać inni użytkownicy, a w razie potrzeby, właśnie z takiej listy/kolekcji chciałbym przywrócć do bazy. Chciałbym zrobić aplikacje czysto webową, ale chciałbym podkreślić - nikt, po za jednym użytkownikiem nie miałby w danym momencie możliwści ingerencji w bazie. Czyli to pozwoliłoby bezkolizyjnie "podmienić" dane. Mógłby mi ktoś to jakoś wytłumaczyć albo czego użyć?
Te wzorcowe ustawienia też musisz gdzieś przechowywać więc może osobna tabela z ustawieniami wzorcowych dla liderów. Potem update na poziomie bazy danych.
No, ale to jeden user będzie miał jeden rekord ustawień w tej tabeli, a nie kilkadziesiąt. Przynajmniej jeśli ma to mieć sens i nie chcesz komplikować sobie życia.
Już wyjaśniam. Załóżmy że mam tabele Ustawienia np.
public Class Ustawienia
int ustawienie1{get;set;}
int utawienie 2{get;set;
....
Następnie mam klasę UstawieniaUzytkownika np
public Class UstawieniaUzytkownika
public string nazwaUstawien{get;set;}
public virtual List<Ustawienia> ustawienia {get;set;}
Chodzi o to, że skoro mam w tabeli "Ustawienia" pewne ustawienia danego uzytkownika, to żebym mógł utworzyć obiekt klasy UstawieniaUzytkownika i do listy "ustawinia" zapisac aktualny stan tabeli "Ustawienia". Następnie kiedykolwiek chciałbym mieć możliwość przywrócenia do bazy stanu który został zapisany w którejkolwiek liście. Główne założenie jest takie, że w liście przechowywałbym obiekty klasy Ustawienia i chciałbym je kiedykolwiek chce z tej listy przywrócić do tabeli głównej czyli wstawić do tabeli "Ustawienia" zawartosc listy z obiektu "UstawieniaUzytkownika"