Kilka miesięcy temu miała swoją premierę kolejna wersja .NET, a wraz z nią również kolejna wersja Entity Framework Core. W tym wpisie chciałbym się skupić na jednej z nowości, która została dodana do Entity Framework Core, a jest nią obsługa mechanizmu Temporal Tables z SQL Server. O mechanizmie tym pisałem już kiedyś w kontekście zwykłego Entity Framework, który nie miał dla niego wsparcia. Od wersji 6 Entity Framework Core mamy oficjalne wsparcie dla Temporal...
Strona głównaUżytkownik
danielplawgo | użytkownik
Bazy danych i XML 1027 dni, 6 godzin, 15 minut temu 167 źrodło rozwiń
Podstawy Terraforma i konfiguracji środowiska mamy już za sobą, więc możemy przejść do bardziej rozbudowanego przykładu. W tym wpisie zobaczysz, w jaki sposób przygotować infrastrukturę pod prostą aplikację webową działającą w Azure. Z wykorzystaniem Terraforma utworzymy takie zasoby jak App Service Plan, czy bazę danych.Zmienne Terraform W poprzednim wpisie pokazałem, w jaki sposób zacząć przygodę z Terraform i Azure. Jeśli nie czytałeś/czytałaś to zachęcam d...
W poprzednim artykule wprowadziłem Cię w tematykę Infrastructure as Code. Pokazałem Ci, czym jest ten proces, jakie są jego plusy oraz minusy. Natomiast w tym wpisie skupimy się już na czymś bardziej praktycznym. Pokażę Ci, jak zacząć pracę z Terraform (Azure) i utworzymy pierwszy prosty zasób z wykorzystaniem kodu. W kolejnym wpisie natomiast stworzymy bardziej rozbudowany przykład.Terraform Terraform (https://www.terraform.io/) jest jednym z rozwiązań Infras...
Posted on przez Daniel PlawgoWprowadzenie Od wielu lat złożoność systemów systematycznie rośnie. Gdy zaczynałem swoją zawodową przygodę z programowaniem w .NET w okolicach 2007, większość systemów była bardzo prosta. Był to na ogół Windows Server z IIS oraz baza danych MS SQL Server. Aktualnie, w szczególności w rozwiązaniach chmurowych, ilość używanych komponentów jest dość spora, nawet przy prostej aplikacji. Dlatego coraz większą popularność zdobywają rozwiązania Infrastructure as Code (IaC), któryc...
Posted on przez Daniel PlawgoWprowadzenie W poprzednim wpisie z mini serii o tworzeniu aplikacji multi tenant pokazałem Ci, w jaki sposób można określić, z jaką organizacją aktualnie pracujemy. Kolejnym problemem, jakim się zajmiemy, jest sposób przechowywania danych. Dwa najczęściej używane podejście to dedykowana baza danych dla każdej organizacji oraz trzymanie wszystkiego w jednej bazie. W tym wpisie zajmę się pierwszym podejściem, natomiast w innym omówię drugie podejście.Plusy dedykowanych baz da...
Architektura 1312 dni, 8 godzin, 7 minut temu 92 źrodło rozwiń
Jednym ze standardowych elementów prawie każdej aplikacji jest walidacja danych. Również Blazor ma wbudowane mechanizmy do walidacji danych, na przykład z wykorzystaniem atrybutów DataAnnotation. W tym wpisie będę chciał pokazać Ci, w jaki sposób wyświetlić w Blazor błędy walidacji pochodzące z Web API.Gdzie walidować dane? Na początku chciałbym się zastanowić nad tym, gdzie powinniśmy zrealizować walidację danych. W przypadku Blazora (czy innej dowolnej techn...
Trzy tygodnie temu opublikowałem pierwszy wpis z mini serii poświęconej tworzeniu aplikacji multi tenant. Tamten wpis dotyczył wprowadzenie w temat, gdzie głównie skupiłem się na plusach i minusach tego rozwiązania. W tym natomiast zajmiemy się pierwszym problemem, który musimy rozwiązać, a jest nim sposób określenia, z jakim tenantem aktualnie mamy do czynienia.Jak określić tenanta? Jednym z pierwszych problemów, jaki musimy rozwiązać, jest sposób określenia ...
Architektura 1331 dni, 9 godzin, 9 minut temu 143 źrodło rozwiń
Praktycznie w każdej aplikacji webowej, wcześniej czy później, będziemy potrzebowali obsłużyć uwierzytelnianie użytkowników. Dlatego fajnie, że tworząc nowy projekt w Visual Studio, możemy dodać do niego obsługę uwierzytelniania oraz widoki, które to realizują. Na ogół z czasem chcemy je zmodyfikować, aby były spójne z projektem graficznym samej aplikacji. Czasami również chcemy je rozszerzyć o jakieś dodatkowe funkcjonalności. Wcześniej tej proces był trochę ...
Na blogu pojawiło się już kilka wpisów poświęconych Postmanowi, który jest genialnym narzędziem do testowania Web API. Używam go praktycznie każdego dnia. Natomiast w dzisiejszym wpisie chciałbym Ci pokazać alternatywę (a tak naprawdę fajne uzupełnienie) Postmana. Jest nim dodatek REST Client do Visual Studio Code. Podobnie jak Postman, REST Client umożliwia wykonywanie żądań HTTP do serwera. A największą różnicą jest to, że zamiast graficznego interfejsu użytk...
Większość aplikacji, jakie tworzymy, to tak zwane aplikacje single tenant. Czyli mamy jedną instancję aplikacji dla pojedynczego klienta/firmy/organizacji, lub w ogóle nie myślimy o takich rzeczach na poziomie samej aplikacji. Gdy pojawia się druga firma, to po prostu stawiamy dla niej nową instancję i wszyscy są zadowoleni. Są natomiast sytuacje, w których taki model działania aplikacji nie sprawdzi się. Na przykład w aplikacjach SaaS (software as a service) ...
Architektura 1352 dni, 8 godzin, 57 minut temu 73 źrodło rozwiń
Używanie kontenerów bardzo ułatwia lokalne programowanie. W szczególności gdy nasz projekt jest rozbudowany i wykorzystuje różne elementy infrastrukturalne, takie jak baza danych, storage, kolejki i tym podobne rzeczy. Dzięki dockerowi możemy w kilka chwil postawić lokalne środowisko do pracy bez konieczności spędzania długich godzin na instalowaniu niezbędnych komponentów. W tym wpisie pokażę Ci, w jaki sposób postawić w dockerze SQL Server, jak go skonfigurow...
Bazy danych i XML 1360 dni, 8 godzin, 58 minut temu 145 źrodło rozwiń
W poprzednim wpisie pokazałem, w jaki sposób za pomocą biblioteki Scrutor dodać do wbudowanego kontenera dependency incjection w .NET Core/.NET 5 automatyczną rejestrację typów. Scrutor poza skanowaniem udostępnia również możliwość rejestrowania dekoratorów, za pomocą których możemy nawet w sposób dynamiczny konfigurować zachowanie typów w naszej aplikacji. A to wszystko bez zmiany kodu typu, do którego będziemy dodawali zachowanie.Wzorzec dekorator Dekorator ...
Od wielu lat wykorzystuję kontener Autofac do wstrzykiwania zależności. Najbardziej przypadła mi do gustu możliwość automatycznej rejestracji typów, dzięki czemu jedną linijką w kodzie można zarejestrować i skonfigurować całą rodzinę typów (implementującą na przykład jakiś interfejs). Gdy zaczynałem pracę z .NET Core, automatyczna rejestracja typów była jedną z rzeczy, której brakowało mi w domyślnym kontenerze. Na szczęście biblioteka Scrutor uzupełnia ten bra...
Możemy spotkać różne sposoby organizacji projektów w repozytoriach. Niektórzy preferują podejście monorepo, w którym wiele różnych projektów/aplikacji znajduje się w tym samym wspólnym repozytorium. Innym podejściem jest multirepo, gdzie dla każdego projektu/aplikacji tworzymy dedykowane repozytorium. Jednym z problemów pierwszego podejścia jest optymalizacja budowania aplikacji w procesie CI/CD, bo nie chcemy budować wszystkich projektów w repozytorium, w mom...
Posted on przez Daniel PlawgoWprowadzenie W jednym z wcześniejszych wpisów pokazałem, w jaki sposób wysłać wiadomość email z wykorzystaniem SendGrida. Wspomniałem również, że umożliwia on otrzymywanie zdarzeń o zmianie statusu wysłanej wiadomości. Możemy otrzymać takie informacje jak dostarczenie wiadomości, otworzenie przez użytkownika, kliknięcie w link. W tym wpisie pokażę Ci, jak otrzymywać te zdarzenia w C#.SendGrid Webhook W panelu konfiguracyjnym SendGrida możemy skonfigurować webhooka, za pomo...
Zdarza się, że potrzebujemy dostać się do jakiejś usługi działającej na komputerze lokalnym z sieci zewnętrznej – na przykład podczas testowania integracji z webhookami wysyłanymi między innymi przez takiego SendGrida. O ile mamy publiczne IP i możemy skonfigurować przekierowanie portów, to nie jest to jakoś mocno problematyczne. Gorzej jak pracujemy w biurze i doproszenie się o to administratorów graniczy z cudem. W takiej sytuacji z pomocą przychodzi tytułowy...
Tworząc systemy, staram się jak najwięcej korzystać z gotowych rozwiązań. Szczególnie w przypadku elementów, które są poboczne w rozwiązaniu, które tworzę, a jednak są wymagane do poprawnego działania aplikacji. Przykładem takiego elementu systemu jest wysyłka wiadomości email. Prawie każda aplikacja wysyła wiadomości email, a twórcy takich systemów jak SendGrid za drobną opłatą zrobią to dużo lepiej niż my.SendGrid SendGrid jest popularną usługą, która służy ...
Jedną z nowości, jaka pojawiła się w Entity Framework Core 5 jest obsługa relacji wiele do wielu bez konieczności dodawania klasy dla tabeli łączącej. Trochę to zajęło, szczególnie, że było to dostępne w zwykłym Entity Framework. Jednak, co istotne, systematycznie są dodawane kolejne rzeczy do Entity Framework Core. Bardzo fajne jest to, że z relacji możemy korzystać na dwa sposoby, o czym w tym wpisie 🙂Relacja wiele do wielu Relacje wiele do wielu realizuje ...
Bazy danych i XML 1417 dni, 5 godzin, 5 minut temu 123 źrodło rozwiń
Tworząc aplikację, na ogół zależy nam na tym, aby działała jak najszybciej. Spędzamy często wiele godzin na tym, aby zoptymalizować jej działanie. Ale sporadycznie pojawiają się sytuacje, kiedy musimy sztucznie ograniczyć ilość operacji. Na przykład API, z którego korzystamy, umożliwia wykonanie tylko ograniczonej ilości żądań w jednostce czasu. Biblioteka RateLimiter, o której mowa w tym wpisie, właśnie umożliwia zrealizowanie czegoś takiego w aplikacji .NET....
W poprzednim wpisie pokazałem, w jaki sposób tworzyć automatyczne testy API w karate. Uruchamiałem je lokalnie z poziomu Visual Studio oraz wiersza poleceń. Ale największą ich zaletą jest automatyczne uruchamianie podczas procesu CI/CD. Zobacz, w jaki sposób to zrobić na przykładzie Azure DevOps.Karate i Azure DevOps Automatyczne wykonywanie testów karate w Azure DevOps nie jest skomplikowane. Jest nawet prostsze niż w przypadku wykonywania testów Postmana. Ni...