Aplikacje postanowiłem stworzyć w technologii ASP.NET Core 1.0. Muszę przyznać, że dla mnie to duża nowość. Stworzenie najważniejszych elementów aplikacji przy użyciu tej technologi jest dla mnie nie lada wyzwaniem. W sumie to cały czas prototypuję. Muszę przyznać, że mimo tego, że to jest 4 post w już sporo sam dla siebie się nauczyłem (w sumie 5 post, ale poprzedniego nie opublikowałem).
Pierwsza rzecz jaką chciałem stworzyć to oczywiście struktura najważniejszych klas modelowych. Najważniejszymi klasami będą oczywiście: Tournament oraz Player.
Pomyślałem, że zastosuję Entity Framework First Code Approach, który powstał przy okazji wydania EF 4.1. Napisałem sobie klasę, żeby zobaczyć jak w ogóle działa teraz EF.
public class Player { public int ID { get; set; } public string Name { get; set; } public string Surname { get; set; } public string Email { get; set; } public string Mobile { get; set; } }
Następnie: prawy przycisk myszką -> Add New Item… Patrzę, a tutaj nie ma klasycznego DBContext Generator. No to ładnie się zaczyna. Po dłuższym googlowaniu i próbowaniu różnych rzeczy znalazłem coś co mi się spodobało: tutaurelia.net. Czego się nauczyłem? Po pierwsze plik project.json przechowuje w sobie informacje o bibliotekach z których projekt będzie korzystać. Po wpisaniu nowej linijki z informacją z jakiej biblioteki chce się korzystać i zapisaniu pliku, VS sam automatycznie pobiera potrzebną bibliotekę (lub wyrzuca jeżeli się usunęło linijkę z tego pliku). Z tutorialem radziłem sobie bardzo przyzwoicie od 5 (bo od tego miejsca zacząłem) do 10 podpunktu. Tutaj na chwilę miałem problem co mam dodać do pliku project.json, bo miałem w tym pliku też inne śmiecie z innych tutoriali. Ale sumarycznie udało się:
{ "version": "1.0.0-*", "compilationOptions": { "emitEntryPoint": true }, "dependencies": { "EntityFramework.Commands": "7.0.0-rc1-final", "EntityFramework.Core": "7.0.0-rc1-final", "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final", "EntityFramework.Relational": "7.0.0-rc1-final", "Microsoft.AspNet.Diagnostics": "1.0.0-rc1-final", "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final", "Microsoft.AspNet.Mvc": "6.0.0-rc1-final", "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final", "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final", "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final", "Microsoft.AspNet.Tooling.Razor": "1.0.0-rc1-final", "Microsoft.Extensions.Configuration.FileProviderExtensions": "1.0.0-rc1-final", "Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final", "Microsoft.Extensions.Logging": "1.0.0-rc1-final", "Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final", "Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final", "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc1-final" }, "commands": { "web": "Microsoft.AspNet.Server.Kestrel", "ef": "EntityFramework.Commands" }, "frameworks": { "dnx451": { } }, "exclude": [ "wwwroot", "node_modules" ], "publishExclude": [ "**.user", "**.vspscc" ], "scripts": { "prepublish": [ "npm install", "bower install", "gulp clean", "gulp min" ] } }
Podpunkt 10 zrobiony, Podpunkt 11 zrobiony – dla osób, które nie wiedzą skąd wziąć connection stringa polecam ten link.
Podpunkt 12. Tutaj mamkilka uwag.
Po pierwsze: gdzie znaleźć command prompt? PCSupport odpowiada. Albo ja podpowiem: Start -> i zacznij pisać ‚command prompt’ (lub zwykłe ‚cmd’).
Następnie dumnie wpisałem w command prompt: dnx ef migrations add Initial i wyskoczyła mi informacja:
‚dnx’ is not recognized as an internal or external command, operable program or batch file.
I podpowiedział mi: StackOverFlow.
Ponownie dumnie wpisałem: dnx ef migrations add Initial i wyskoczyła mi inna informacja:
Error: unable to resolve project from <moj sciezka>
StackOverFlow przychodzi z odsieczą. Byłem po prostu w złym folderze. Tutaj kolejna nauka dla mnie: jak jestem w Command Prompt to zawsze mam siedzieć w folderze gdzie jest kod źródłowy!
Po raz kolejny dumnie wpisałem: dnx ef migrations add Initial i wyskoczył mi error z dokładną lokalizacją gdzie się EF posypał się w kodzie. Coś się w końcu zaczyna się lepszego wyświetlać. Ale tym razem nie wiem w ogóle co googlować. Ale jak wiadomo tonący brzytwy się chwyta znalazłem coś ciekawego na Stacku.
Run
dnu restore
at first. Then check ifdnx ef
gives any output. If it does display a EF7 unicorn then add migration withdnx ef migrations add initial
.
Po prawdzie jedne głos, że odpowiedź pomogła, ale spróbowałem. I zobaczyłem tego jednorożca!
Niezłomnie wpisałem: dnx ef migrations add Initial i wyskoczyła mi informacja: Done. Później wpisałem: dnx ef database update i wskoczyła mi informacja: Applaying migration „<dataigodzina>_initial”. Done.
W SQL MS elegancko zobaczyłem moją klasę odzwierciedloną w bardzie danych.
Przy okazji tych problemów nauczyłem się jeszcze jednej rzeczy: podczas googlowania problemów będę używać takich słów kluczowych jak asp.net 5, dnx, asp.net core.
PS. Tak, tak. WebApplication5.Model.Players to jeden z moim projektów prototypów na których sprawdzałem, czy EF działa :).
Fajnie, że pokazujesz coś nowego. Sam już z tego korzystam i wiem jakie problemy mogą z tego wyniknąć. Może też przy okazji się czegoś nauczę (testowanie jednostkowe) 😀 Powodzenia w dalszej części konkursu
Na własnej skórze kiedyś się przekonałem, że testy jednostkowe dużo dają w późniejszych etapach projektu i teraz jak mam możliwość to staram się ich używać. Polecam Ci książkę na start: „TDD. Sztuka tworzenia dobrego kodu” napisaną przez Kent Becka. Życzę Ci powodzenia z testami!
Dzięki, że doceniasz moją pracę :). Mam nadzieję, że dam radę wytrwać do końca konkursu.
Dzięki za książkę.