Jak się dowiedzieć, czy nasz kod działa wolno i przydałoby się go przyśpieszyć? Często opieramy się na naszej wiedzy, doświadczeniu oraz intuicji. Innym razem dostajemy uwagi od naszego zespołu podczas code review. Albo po prostu widzimy, że aplikacja się wlecze, jak czas pracy w poniedziałek. Nie zawsze jednak uda nam się to dostrzec, bo my ludzie, mamy spowolnioną percepcję, która nie nadąża za obliczeniami komputera. Łatwo zauważymy różnicę sekund, ale z mniejszymi wartościami, już sobie nie radzimy. Z pomocą może przyjść BenchmarkDotNet. Bo dobrze by było móc zobaczyć wyniki prędkości kodu. Tak by mieć liczby przed oczami i móc porównać czasy. Moglibyśmy wtedy sprawdzić ilokrotnie dany kod wykonujący tą samą czynność…
-
-
Parametry w Dapperze
W poprzednim wpisie na temat Dappera, który możecie przeczytać tutaj, opisałem jego podstawowe właściwości oraz przedstawiłem, w jaki sposób możecie z niego skorzystać, aby wykonać najprostsze operacje bazodanowe. Czyli w skrócie znajdziecie tam, jak zrobić całego CRUDa. No i w zasadzie, jest to kwintesencja tego narzędzia, lecz nie wszystko, co warto o nim wiedzieć. W tym artykule wyjaśnię, w jaki sposób można połączyć dane z SQL-owymi zapytaniami korzystając z Dappera. Statyczne zapisanie wartości Gdy znamy wartości poszczególnych elementów możemy zapisać je bezpośrednio w zapytaniu. Przykładowo, gdy chcemy pobrać użytkowników, którzy nie są usunięci (a w zasadzie zarchiwizowani), to wskazujemy w warunku zapytania na to przez podanie odpowiedniej wartości. To zapytanie…
-
Dapper, czyli król .NETowych mikro ORMów
Najbardziej popularnym ORMem w świecie .NETu jest bez wątpienia Entity Framework. Posiada on wiele wbudowanych mechanizmów ułatwiających pracę z bazą danych, ale odpokutowuje to pewnymi niedogodnościami. Nie należy on do najwydajniejszych ORMów, generuje czasami pokrętne zapytania, oraz łatwo można wpaść w tarapaty, np. przez problem N+1. Istnieją również alternatywy, jak np. nHibernate, czy Dapper! Jak sami twórcy wskazują, a są to ludzie od StackOverflow, Dapper jest królem wśród micro ORMów pod względem prostoty oraz wydajności działania. Jego zadanie polega tylko na przekształcaniu danych z jednego modelu w drugi, czyli na samej istocie działania mechanizmu ORM: mapowaniu. Nie uświadczycie tutaj wielu fajerwerków, zapytania pisze się z palca, wiec czasami trzeba się…
-
Płytkie (shallow) oraz głębokie (deep) kopiowanie – Język C#
Kontynuuję artykuł na temat tworzenia kopii obiektów referencyjnych. We wcześniejszym wpisie, który możecie znaleźć tutaj, zaprezentowałem jak działa metoda MemberwiseClone oraz interfejs ICloneable, ale czy na pewno wszystko zostało powiedziane? Płytkie kopiowanie (ang. shallow copy) W poprzednim materiale nie bez powodu badanym obiektem był punkt, składający się z dwóch typów wartościowych: X oraz Y. Tym razem będzie trochę inaczej, bo utworzymy obiekt zawierający typy referencyjne. W przykładzie mamy klasę detektywa, który ma do wykonania pewne zadanie. Będzie ono składać się z identyfikatora oraz zmiennej tekstowej określającej co należy zrobić. Sklonujmy teraz detektywa i zmienimy pewne wartości. Po uruchomieniu przykładu zobaczymy: Nie wyszło jednak tak, jak chcieliśmy. Imiona detektywów pokazały się…
-
Tworzenie kopii obiektów przez MemberwiseClone oraz ICloneable – Język C#
Przypisanie istniejącego obiektu do innej zmiennej niesie ze sobą pewne ryzyko. Należy być świadomym, czym różni się i co zawiera w sobie typ referencyjny, a co typ wartościowy. O typach wartościowych pisałem już nieco podczas omawiania struktur, w tym materiale. Tam też przedstawiłem problem przypisywania typów referencyjnych do innej zmiennej, który zaraz przypomnę. Przypisywanie typów wartościowych Jak sama nazwa wskazuje typy te zawierają w sobie wartość, która zostaje im przypisana. Stwórzmy w naszym testowym przykładzie zwykłą strukturę reprezentującą punkt na płaszczyźnie 2D: Punkt taki składa się z dwóch właściwości, jedna wskazuje położenie w poziomie, a druga w pionie (takie małe przypomnienie ze szkoły). Teraz utwórzmy obiekt naszej struktury, czyli punkt,…
-
Operacje CRUD – EF Core
W poprzednim wpisie, dotyczącym EF Core, pokazałem jak utworzyć prostą bazę danych składającą się z jednej tabeli w podejściu Code First. Jednak baza danych do czegoś służy, a nie wegetuje sobie gdzieś. Dzisiaj wykonamy na niej proste operację CRUD, czyli dodamy element (Create), wczytamy go z bazy danych (Read), zmodyfikujemy jego zawartość (Update) oraz usuniemy z bazy danych (Delete). CRUD jest oczywiście akronimem od tych wszystkich operacji. Do tej pory z cyklu poradników o EF ukazały się: Tworzenie bazy danych w podejściu Code First – EF Core Przypomnienie Trochę przypomnienia z poprzedniego wpisu, żebyście nie musieli weryfikować go od nowa. Operujemy na tabeli detektywa, określonego przez klasę: a nasza baza…
-
Tworzenie bazy danych w podejściu Code First – EF Core
Podejście Code First polega na utworzeniu modelu danych za pomocą klas języka C#. Utworzona klasa będzie reprezentowała tabelę bazy danych, a zawarte w niej właściwości (ang. property) będą odzwierciedlały kolumny tabeli. Na podstawie wskazanych klas, które mają być zawarte w bazie danych, EF Core wygeneruje odpowiednie tabele. W tym wpisie pokażę jak utworzyć prostą bazę danych składającą się z jednej tabeli reprezentującą encję detektywów. Na początek wybieram projekt. Będzie to zwyczajna aplikacja konsolowa w Core: Teraz stworzę model danych w postaci klasy POCO (Plain Old CLR Objects). Jest to prosta klasa, odzwierciedlająca dany byt, która później zostanie zamieniona na tabelę bazy danych. Tutaj będzie to tabela detektywów. Zauważcie, że model…