Author Archives: Jakub Skoczeń

Entity Framework Code First Migrations

Entity Framework to kolejna generacja technologii firmy Microsoft, która zapewnia dostęp do danych. Jest to rozszerzona technologia ORM (ang. Object Rational Mapping), która ułatwia powiązanie danych w bazie danych z obiektami w aplikacji, poprzez stworzenie abstrakcyjnych modeli obiektowych w aplikacji z modeli relacyjnych lub logicznych. Dzięki temu możliwe jest tworzenie zapytań i manipulowanie danymi używając programowania zorientowanego obiektowo.
Używając Entity Framework możliwe są trzy podejścia do wyboru: Code First, Database First i Model First. Podejście Code First polega na zdefiniowaniu za pomocą kodu w języku C# typów odpowiadających modelowi danych, na podstawie którego zostanie wygenerowany schemat bazy danych. Przeciwieństwem jest podejście Model First, gdzie najpierw tworzy się model bazy danych korzystając z gotowego narzędzia w Visual Studio, a schemat bazy oraz odpowiadające mu klasy zostaną wygenerowane automatycznie przez Entity Framework. Database First z kolei polega na samodzielnym stworzeniu bazy danych, a następnie jej importowaniu, po czym tworzone są odpowiednie klasy.

Jak stworzyć bazę danych przy użyciu EF i podejścia Code First?
Tworzymy nowy projekt ASP.NET Web Application z szablonem Empty. Następnie przechodzimy do Nuget Package Managera i wyszukujemy pakiety takie jak widoczne na obrazku poniżej.

clip_image001

clip_image002

clip_image003

Kolejnym krokiem jest stworzenie modeli.

clip_image004

Poniżej przykład jednego modelu EventType.

Musimy także pamiętać o dodaniu klasy kontekstu. Kontekst musi zawierać także właściwości, które reprezentować będą tabele w bazie danych. W kontekście możemy dodatkowo przeciążyć metodą OnModelCreating, gdzie możemy wprowadzić trochę ustawień, np.:
usunięcie konwencji nazewnictwa tabel w liczbie mnogiej,

usunięcie konwencji usuwania kaskadowego,

czy też włączenie kaskadowego usuwania dla konkretnego powiązania między tabelami, za pomocą FluentAPI.

Prawidłowo stworzony kontekst w przypadku mojego projektu wygląda obecnie tak:

Gdy warstwę modelu mamy już stworzoną, możemy przystąpić do migracji, czyli aktualizacji struktury bazy danych lub raczej jej utworzenia, ponieważ jest to pierwsza migracja. W tym celu otwieramy konsolę Package Managera.

clip_image005

Upewniamy się żę Default project to ten dla którego chcemy włączyć migracje. Wpisujemy polecenie Enable-Migrations i dajemy enter.

clip_image006

Jeśli pojawi się błąd tak jak na poniższym obrazku, oznacza to że w którejś z encji zapomnieliśmy dodać właściwość Id.

clip_image007

W tym przypadku chodzi o klasę Location, tak więc dodajemy:

i wywołujemy polecenie raz jeszcze, ale tym razem konieczne jest dodanie parametru -Force:

w przeciwnym wypadku dostaniemy komunikat:

„Migrations have already been enabled in project ‚Repository’. To overwrite the existing migrations configuration, use the -Force parameter.”

Po dodaniu migracji do projektu zostanie dodany folder Migrations z klasą Configuration.cs.

clip_image008

Kolejny krok to wywołanie polecenia, które utworzy migrację startową. Spowoduje to utworzenie nowej klasy w folderze Migrations, dziedziczącej po DbMigration, która zawiera dwie metody Up() i Down(). Jak się można domyśleć metoda Up() zawiera zmiany jakie mają zostać wprowadzone w bazie danych, natomiast metoda Down() jest przeciwieństwem, czyli odwraca zmiany wprowadzone przez metodę Up().

clip_image009

Kolejny krok to aktualizacja bazy danych.

clip_image010

Teraz możemy sprawdzić efekt, otwierając Server Explorera z zakładki View. Jak widać tabele zostały utworzone. W przypadku wprowadzenia zmian w modelu i kolejnej migracji, struktura bazy danych zostanie zaktualizowana, bez utracenia danych w niej zawartych.

clip_image011.png

Time Planner–konfiguracja GitHuba z VS i stworzenie projektu

Korzystając z Visual Studio 2015 i GitHuba niezbędna będzie wtyczka, która nazywa się: GitHub Extension for Visual Studio. Dzięki niej można łatwo podpiąć repozytorium GitHuba do VS. Jak tego dokonać? Już prezentuję.

Z VS wybieramy Tools -> Extensions and Updates

clip_image001

Wybieramy grupę Online i wpisujemy w wyszukiwarce GitHub Extension for Visual Studio. Klikamy Download.

clip_image002

Następnie instalujemy rozszerzenie i restartujemy Visual Studio.

clip_image003

Przechodzimy do okienka Team Explorer, klikamy Manage Connections -> Connect to GitHub, podajemy dane swojego konta i klikamy Login.

clip_image004

clip_image005

Kiedy już się zalogujemy, tworzymy nowy projekt w VS. W tym przypadku, będzie to ASP.NET Web Application z szablonem MVC 5. Dodatkowo możliwe jest stworzenie projektu z testami jednostkowymi. Trochę też się zastanawiałem, czy jednak nie wykorzystać .NET Core 1.0 i MVC 6, jednak stwierdziłem, że jest to dopiero pierwszy release, bardziej okrojony od .NET 4.6, więc rozsądniej będzie wybrać MVC 5 i .NET Framework 4.6, a na pewno będzie łatwiej rozwiązywać napotkane problemy.

clip_image006

clip_image007

Gdy projekt zostanie utworzony, dodajemy go do naszego systemu kontroli wersji. Wpisujemy komentarz i wybieramy Commit. Spowoduje to commit lokalnie, nie oznacza to jeszcze, że zmiany znajdą się w repozytorium na serwerze. W tym celu można od razu wybrać Commit and Push lub przejść do opcji Sync.

clip_image008

clip_image009

clip_image010

Klikamy Get Started przy opcji GitHub, następnie uzupełniamy nazwę repo i klikamy Publish. Teraz kod znajduje się już na serwerze.

clip_image011

clip_image012

Co w przypadku dalszych commitów, gdy już dodamy trochę kodu? Postępujemy analogicznie. Wybieramy Source Control -> Commit, dalej postępujemy tak samo jak wyżej. Po commicie lokalnym, możemy wykonać push z opcji synchronizacji.

clip_image013

clip_image014

Teraz nie pozostaje nic innego jak zająć się kodowaniem 🙂

Time Planner–narzędzia

tool

W poprzednim poście opisałem tematykę projektu i wymieniłem technologie. Teraz czas na przedstawienie narzędzi. Zintegrowane środowisko programistyczne, które zostanie użyte to Microsoft Visual Studio w najnowszej wersji 2015 Enterprise (obecnie z Update 1). Dodatkowo nie obędzie się bez Resharpera, który pozwala na zwiększenie efektywności klepania kodu, czyli analizuje kod, pomaga eliminować błędy i code smells, a także usprawnia refaktoryzację. Przyzwyczaiłem się już trochę do tego toola, dlatego nie wyobrażam sobie już pracy bez niego 😛

Do kontroli wersji użyty zostanie Git, a repozytorium będzie dostępne na GitHubie (wynika to z regulaminu konkursu). Wcześniej nie miałem okazji korzystać z Gita, ponieważ nie było takiej potrzeby, przyzwyczaiłem się do TFSa i w sumie było mi z tym dobrze (wiem wiem zaraz znajdą się hejterzy :P). Także w końcu jest okazja poznać Gita 🙂 Repo projektu znajduje się pod tym adresem. Osoby niezwiązane z programowaniem, czy też początkujący programiści pewnie zastanawiają się po co komu system kontroli wersji. Już odpowiadam. Działa to tak, że po każdej implementacji kawałka kodu (zazwyczaj kompilującego się) wysyłamy nasz kod do repozytorium. Można ten zabieg wykonywać częściej lub rzadziej, ale zalecane jest jak najczęściej. Następnie możemy zająć się dalej kodowaniem i nawet jeżeli coś zepsujemy, to mamy ten przywilej, że w każdej chwili możemy wrócić do poprzedniej działającej wersji. Mało tego, możliwe jest porównywanie zmian w poprzedniej i aktualnej wersji oraz śledzenie postępu prac. Także bez Gita, TFSa, SVNa, itd. się nie obędzie przy pracy nad projektem. Należy także wspomnieć, że systemy kontroli wersji dzielą się na scentralizowane i rozproszone, ale to już temat na inny post. Z tych wymienionych wyżej – rozproszone: Git, scentralizowane: TFS, SVN.

Dodatkowo dobrze by było zrobić sobie backlog zadań, które mają zostać zrealizowane, tak aby o nich nie zapomnieć i móc śledzić postęp swoich prac. Do tego celu użyty zostanie TFS w wersji online. Dzięki temu, możliwe będzie również planowanie sprintów i wyznaczanie swojego capacity (tak będę Scrum Masterem, Product Ownerem i Developerem na raz 😀 zrobię sobie jednoosobowego Scruma, a co!).

Time Planner–Projekt open source

Witajcie! Jak już wspomniałem w pierwszym poście na blogu, rozpoczynam pracę nad projektem open source, który ma głównie na celu zapoznanie się z technologiami ASP.NET MVC, AngularJS, Azure i może przy okazji jeszcze coś się nawinie. Motywacją do prowadzenia bloga i projektu jest konkurs realizowany przez Macieja Aniserowicza – „Daj Się Poznać”. Już od dawna chciałem prowadzić własnego bloga (tak to głównie Maciej mnie zainspirował do tej działalności :)), jednak teraz dostałem trochę kopa motywacyjnego, ponieważ regulamin konkursu wyraźnie mówi: „minimum 2 posty techniczne tygodniowo” na blogu – ok to spróbuję. Ponadto projekt ma być prowadzony min. przez 10 tygodni. W całym tym konkursie nie chodzi mi w cale o wygranie nagrody, chce po prostu poznać technologie. Projekt, który będę realizował, też nie jest jakimś bardzo odkrywczym tematem, chodzi o stworzenie czegoś co ma ręce i nogi, co pomoże zdobyć trochę doświadczenia.

No dobra, a teraz do rzeczy. Projekt open source, który będę tworzył nazwałem roboczo: TimePlanner. Zamysł jest taki, żeby stworzyć portal umożliwiający zaplanowanie wolnego czasu, poprzez tworzenie spotkań, wydarzeń, przeznaczony dla osób, które mają wolny czas, ale nie wiedzą gdzie i z kim wyjść, itp. Dla kogo to może być użyteczne? Wyobraźmy sobie sytuację, że przeprowadzamy się do nowego miasta i nie mamy w nim znajomych, a chcielibyśmy kogoś poznać, wyjść z kimś na piwo, niekoniecznie umawiać się na randki 😉 Wchodzimy więc na ten portal dodajemy ogłoszenie, a inni użytkownicy mogą je zobaczyć i dołączyć się do tzw. eventu, oczywiście uwzględniając lokalizację, itp. Zauważyłem, że w ostatnim czasie wiele tego typu ogłoszeń pojawia się na facebooku, więc pomyślałem, że może komuś się to przyda i coś z tego się urodzi i nie będzie to kolejny projekt do szuflady. Czas pokaże, zobaczymy…

Kolejne posty będą bardziej techniczne, chociaż nie wykluczam, może pojawią się też jakieś o bardziej miękkiej tematyce, a tymczasem trzeba przygotować narzędzia do pracy i zacząć działać 🙂

Zachęcam do śledzenia mnie na twitterze i facebooku, będę tam umieszczał informacje o pojawieniu się nowych wpisów na blogu 😉

Nowości w C# 6.0

Wraz z Visual Studio 2015 pojawiła się nowa wersja języka C#, a wraz z nim kilka udogodnień. Dotyczą one tylko uproszczenia składni, nie wprowadzono nowych funkcjonalności jak w poprzednich wersjach (patrz C# 5.0 – async, await). Poniżej opiszę krótko wszystkie nowe udogodnienia, które pozostają nam do dyspozycji na ten moment Puszczam oczko

1. Initializers for auto-properties
Od teraz inicjalizacja właściwości może wyglądać tak:

2. Using static members
Możliwość użycia dyrektywy using dla składowych statycznych

3. Dictionary initializer
Nowy format zapisu kolekcji słownikowej. Przyznajcie, że teraz jest o wiele czytelniej Puszczam oczko

4. Property expressions
Nasze właściwości możemy wzbogacić lambdą.

5. Method expressions
Podobnie ma się to do metod.

6. Null-conditional operator
Przykładowo mamy metodę GetName, która przyjmuje obiekt typu Test. W ciele metody chcemy odczytać właściwość Name.

7. Await w blokach catch i finally

8. Exception filters
C# 6.0 umożliwia filtrowanie wyjątków, aby tego dokonać należy wykorzystać słowo kluczowe when

9. Nameof expressions
Umożliwia pobranie nazwy np. w tym przypadku właściwości.

Nie wymieniłem tutaj Primary constructors, ponieważ ten feature został jednak wycięty z C# 6.0. Może zostanie dodany w kolejnej wersji. Mam nadzieję, że niczego nie pominąłem z nowości w C# 6.0. Jeżeli jednak coś mi umknęło to piszcie proszę w komentarzach, wtedy postaram się zaktualizować listę Uśmiech

 

Console.WriteLine(„Hello World!”);

Witam na moim blogu. W związku z tym, że jestem programistą .NET niniejszy blog będzie poświęcony właśnie tej tematyce.

Już niebawem rozpocznę pracę nad projektem open source, dzięki któremu chcę poznać technologię ASP.NET MVC (i może przy okazji liznąć trochę innych technologii 😛 ). Na tym blogu będę zamieszczał posty informujące o postępie prac nad projektem oraz posty stanowiące mój Knowledge Base, taki notatnik online żeby inni też mogli skorzystać z wiedzy 😉

Stay tuned!