system rejestrujacy wszystkie zmiany w bazie danych

0

jak nailepiej zaimplementowac dla MSSQL'a system rejestrujacy wszystkie zmiany w bazie danych.

np. Mam tableke tabela1, wszystkie zmainy (edit, add,delete) chece zapisywac w tabeli zmiany (id,data,userid...)

Jedyne rozwiazanie jakie przychodzi mi na mysl to triggery albo z poziomu c# przy kazdym edit/add/delete wstawiac rowniez wierdz do tabeli zmiany.

0

Triggery lepsze, bo ktos moze w aplikacji zapomniec, ze trzeba jeszcze cos dolozyc. Chyba, ze zrobisz obiekt proxy, przez ktory bedzie wszystko szlo. Widzialem i takie i takie zastosowanie. Pierwsze, jesli rejestrowanie zmian jest proste, drugie, jesli dochodza bardziej skomplikowane procesy logiki biznesowej albo np. chcesz razem z tym zapisac kto zmienil (z punktu widzenia aplikacji, a nie bazy), kiedy, jakies id operacji biznesowej, identyfikator procesu, itp.

0

na czym polega wykorzystanie objektu proxy?

0

Piszesz klase np. QueryExecutor i tam metody Insert, Update, Delete, w ktorych po wykonaniu zapytania dodajesz tez do tej tabeli informacje o zmianach. I wszystkie metody uzywajace tych operacji uzywaja tej klasy/dziedzicza z niej, czy cos w tym stylu.

0

mozesz tez uzyc jakiegos OR mapper'a (od MS Linq2Sql lub nowszy EntityFramework) i tam przeciazyc SubmitChanges, czyli rozwiazanie zblizone do proopzycji jahny_bravo z klasa proxy

0

uzywam XPO (devexpress)

0

subclassuj UnitOfWork - mam najdzieje ze z niego korzystasz, jak nie to kombinuj z macierzystą Session - i na commicie utworz odpowiednie obiekty opisujace zmiany i je dorzuc do zapisywanego wlasnie zestawu. niestety z 1.5 roku temu z XPO korzystalem i juz nie pamietam dokladnej nazwy metody ktora pozwala odebrac Session/UOW liste obiektow do zapisu, ale na pewno mozna w jednym (od razu) lub dwoch krokach (odebrac liste wszystkich, odfiltrowac niezmienione)

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