Budując Microbank chcę najpierw zbudować MVP, a potem stopniowo dodawać funkcjonalności.
W poprzednim wpisie skończyłem na działającej aplikacji, uruchomionej na AppHarbor. Dla ułatwienia używała ona bazy danych w pamięci, jakiej zwykle używa się w projektach testowych.
Następnym krokiem jest podłączenie prawdziwej bazy danych.
Punktem wyjścia jest ten oto kod w Startup.cs, który uzywa InMemoryDatabase.
1 2 3 4 5 6 7 8 |
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddDbContext<MicroBankContext>(options => options.UseInMemoryDatabase("microbank")); } |
Wybór bazy
Ale jakiej bazy powinienem użyć? Sprawdźmy najpierw, na co pozwala AppHarbor, za darmo.
- ElephantSQL – PostgreSQL as a Service
- mLab MongoDB – MongoDB-as-a-Service
- MySQL – Shared MySQL Database
- SQL Server – Shared Microsoft SQL Server as a service
Kolejne kryterium to – z czym może współpracować Entity Framework Core? Zaglądamy na listę providerów, skąd dowiadujemy się, że:
- MS SQL Server (naturalnie),
- MySql (zgodnie z oczekiwaniami) i
- PostgreSQL są wspierane.
Cóż, właściwie samo przechowywanie danych nie jest dla mnie w tym projekcie szczególnie interesujące. Celem projektu jest poznanie .net Core i pobawienie się nowymi zabawkami od Microsoftu. Więc PostgreSQL odpada, Mongo też, i na placu boju pozostaje w zasadzie tylko SQL Server i – jako backup – MySql, gdyby okazało się że nie mogę mieć SQL Servera za darmo.
2017 Express Edition
Ale na szczęście okazuje się, że można mieć za darmo i to sporo. Instaluję więc 2017 Express Edition z SQL Server Management Studio 17.4
Wsparcie dla SqlServers zainstalowałem z linii komend:
1 2 3 |
dotnet add microbank.csproj package Microsoft.EntityFrameworkCore.SqlServer |
Zaraz potem dodałem connection stringa do konfiguracji i odpaliłem apkę. Na razie connection string jest zahardkodowany, dla ułatwienia. Ostatecznie skończy w appconfig.json
1 2 3 4 5 6 7 8 9 10 11 |
private string _connectionString = @"Server=(local)\SQLEXPRESS;Database=microbank;Trusted_Connection=True;"; // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddDbContext<MicroBankContext>(options => options.UseSqlServer(_connectionString)); } |
Niestety, to skończyło się błędem:
1 2 3 4 5 6 7 8 |
fail: Microsoft.EntityFrameworkCore.Database.Connection[20004] An error occurred using the connection to database 'microbank' on server '(local)\SQLEXPRESS'. System.Data.SqlClient.SqlException (0x80131904): Cannot open database "microbank" requested by the login. The login failed. Login failed for user 'MicrosoftAccount\jkaleta@gmail.com'. |
Początkowo założyłem, że to z moim connection stringiem coś jest nie tak, ale potem doszedłem do wniosku, że chyba jeszcze nie wszystko ustawiłem w samym Entity Framework.
Ale o tym w następnym poście…
Be First to Comment