ObjectHasher, czyli jak wyliczyć hash z obiektu

System nad którym obecnie pracuję wykonuje wiele zapytań do zewnętrznych systemów. Każde zapytanie generuje nie tylko opóźnienie w działaniu aplikacji, ale również dodatkowe koszty. Postanowiliśmy zaimplementować rodzaj cache’u po naszej stronie. Do tego celu potrzebowaliśmy obliczać hash z modelu który przychodził do systemu. Niniejsza notka pokazuje przykładową implementację komponentu do wyliczania hash’a z obiektu.
Continue reading

Entity Framework SQL query tracer

Niejednokrotnie potrzebujemy podejrzeć zapytanie SQL wygenerowane przez EF. Często zdarza się, że takie zapytanie chcemy odpalić na bazie danych i zobaczyć wynik. Można wtedy podpiąć się profilerem do bazy i przechwycić je w całości. Niestety takie rozwiązanie jest bardzo czasochłonne. Można też wywołać metodę ToString() na obiekcie typu IQuarable, jednakże to rozwiązanie dostarczy nam zapytanie SQL bez parametrów filtrujących. W tym artykule opiszę jak bezpośrednio w kodzie uzyskać pełne zapytanie SQL wraz z parametrami filtrującymi.
Continue reading

SelfInstaller, czyli samoinstalująca się usługa

Jakiś czas temu opisałem jak utowrzyć instalator dla uslugi Windows w środowisku Visual Studio. Jest to sposób dość skomplikowany i czasochłonny. Z drugiej strony daje duże możliwości konfiguracyjne i rozszerzające. Nie o tym jednak. W niniejszym artykule opisuję jak zainstalować usługę Windows wyłącznie za pomoca kodu.
Continue reading

Cache dla danych z bazy

W każdej aplikacji, wykorzystującej bazę danych do przechowywania informacji, są elementy/tabele/struktury, których zawartość zmienia się niezmiernie rzadko. W związku z tym, zasadne wydaje się zaimplementowanie mechanizmu przechowywania tychże informacji w “bardziej stałym” obiekcie. Ograniczyłoby to komunikację pomiędzy bazą danych i aplikacją, a tym samym zwiększyło wydajność aplikacji. Mechanizm taki można zaimplementować na wiele sposobów. Jednym z nich może być klasa typu Manager do przechowywania i zarządzania informacjami. Ja natomiast pokusiłem się o implementację typu cache, którą prezentuję poniżej.
Continue reading

Dynamiczne tworzenie właściwości (properties)

Na początek geneza powstania problemu. Otóż jest wiele starszych systemów, które komunikują się z bazą danych za pomocą procedur. Otrzymują w ten sposób informacje na przykład w postaci obiektu DataSet czy DataTable, a następnie na nich wykonywane są różne operacje.
Mój problem, a raczej pytanie, powstało, gdy któryś raz z kolei brałem pierwszy wiersz z otrzymanych wyników, a następnie tworzyłem z nich konkretny tekst za pomocą string.Format()“Czy nie można tego przyśpieszyć?”. W ten sposób powstał pomysł by wykorzystać metodę rozszerzeniową FormatWith(). Trudność zagadnienia polega na tym, iż ta metoda wykorzystuje właściwości (properties) przesłanego do niej obiektu. Jak wiadomo, właściwości są statycznymi elementami klasy, a ja potrzebowałem tworzyć je dynamicznie – każda kolumna to property z wartością wiersza. “Czy jest to możliwe do osiągnięcia?”. Continue reading

XLinq – Linq to XML

Wiele mówi się o technologii Linq (WikipediaMSDN), która jest częścią Framework’a 3.5. Tym samym nie jest trudno znaleźć przykłady wykorzystania tego cuda. W tym artykule chciałbym zaprezentować zapytania Linq do plików XML. Ich prostota w konstruowaniu oraz niesamowita efektywność w działaniu dają wiele możliwości zwolennikom formatu XML.
Continue reading