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 restoreat first. Then check ifdnx efgives 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ę.