Tag Archive for: bazy danych

Dodanie autoryzacji do aplikacji ASP.NET Core

poprzednim wpisie opisałam, jak stworzyć odpowiednie kontrolery i widoki w aplikacji ASP.NET Core przy użyciu Entity Framework Core.
Teraz do aplikacji dodamy autoryzację.
W pliku appsettings.json widzimy następujące ustawienia:
Dodanie autoryzacji do aplikacji ASP.NET Core
Zmieniamy nazwę serwera z (localdb)\mssqllocaldb na nazwę własnego serwera (np. ZALNET-PC\SQLCOURSE2017) oraz skracamy nazwę bazy danych na aspnet_Frontend.
SQL Server od wersji 2012 został wyposażony w nową funkcjonalność – SQL Express LocalDb. Celem LocalDb jest zapewnienie programistom lokalnego środowiska, które jest znacznie łatwiejsze do zainstalowania i zarządzania. Zamiast instalować usługę i konfigurować zabezpieczenia, po prostu uruchamiają instancję tego nowego środowiska lokalnego LocalDb, kiedy tego potrzebują. Ponadto pobieranie instalki Express LocalDB to tylko około 33 MB (lub 27 MB, jeśli nadal korzystamy z  architektury x86), w porównaniu do 100 s MB wymaganych do pobrania pełnej wersji SQL Server Express. Ja mimo tych wszytskich zalet LocalDb wolę jednak zainstalowane wersje SQL Server.
ASP.NET Core MVC: Zmiana ustawień z “No Authentication” na “Individual User Accounts” w istniejącym projekcie
Na serwerze SQL tworzymy bazę danych o nazwie aspnet_Frontend, tak jak zadeklarowaliśmy to w DefaultConnection.
CREATE DATABASE aspnet_Frontend;
GO

Teraz przechodzimy do Package Manager Console i tam wywołujemy polecenie: Update-Database -Context ApplicationDbContext.
Polecenie to stworzy w naszej bazie danych wszystkie tabele, do których odwołujemy się w ApplicationDbContext.
ASP.NET Core MVC: Zmiana ustawień z “No Authentication” na “Individual User Accounts” w istniejącym projekcie
Po wykonaniu powyższego polecenia możemy zobaczyć, że w naszej bazie danych pojawiły się odpowiednie tabele:
ASP.NET Core MVC: Zmiana ustawień z “No Authentication” na “Individual User Accounts” w istniejącym projekcie

Testy widoków Register i Login

Uruchamiamy aplikację i rejestrujemy nowego użytkownika.
ASP.NET Core MVC: Zmiana ustawień z “No Authentication” na “Individual User Accounts” w istniejącym projekcie
Sprawdzamy, czy jesteśmy poprawnie zalogowani.
ASP.NET Core MVC: Zmiana ustawień z “No Authentication” na “Individual User Accounts” w istniejącym projekcie
Sprawdzamy, czy możemy się wylogować z aplikacji, a następnie ponownie logujemy się do aplikacji.
ASP.NET Core MVC: Zmiana ustawień z “No Authentication” na “Individual User Accounts” w istniejącym projekcie
Teraz przechodzimy do bazy danych i sprawdzamy zawartość tabeli dbo.AspNetUsers:ASP.NET Core MVC: Zmiana ustawień z “No Authentication” na “Individual User Accounts” w istniejącym projekcie
Jak uruchomimy aplikację, możemy zaobserwować, że gdy klikniemy na link Register, to przekierowuje nas do widoku Register i kontrolera Account w folderze Identity. Folder Identity znajduje się w folderze Areas. Ale jego aktualna zawartość to tylko folder Pages i plik _ViewStart.cshtml. Nie ma żadnych innych folderów i plików.
Dodanie Entity Framework Core do ASP.NET Core
Ale jak przejdziemy na stronę rejestracji, to widzimy, że wszystko działa i że w URL zawiera i nazwę kontrolera i nazwę metody akcji .

ASP.NET Core MVC: Zmiana ustawień z “No Authentication” na “Individual User Accounts” w istniejącym projekcie
Ale jak to wszystko działa i dlaczego? Aby zobaczyć w strukturze naszego projektu wykorzystywane tutaj widoki i kontrolery, klikamy prawym przyciskiem myszy na folderze Identity, potem klikamy Add, a potem New Scaffolded Item ….
Dodanie Entity Framework Core do ASP.NET Core

W oknie dialogowym Add Scaffold po lewej stronie wybieramy Identity i klikamy przycisk Add.
Dodanie Entity Framework Core do ASP.NET Core
W oknie dialogowym Add Identity możemy dodać wszystkie lub wybrane widoki powiązane z kontrolerem Account.
Dodanie Entity Framework Core do ASP.NET Core
Jak widać, do projektu zostały dodane nowe widoki.
Dodanie Entity Framework Core do ASP.NET Core
Teraz uruchamiamy aplikację, aby sprawdzić, czy wszystko działa tak jak trzeba. Klikamy na link Register i dodajemy nowe konto.
Dodanie Entity Framework Core do ASP.NET Core
Sprawdzamy, czy konto zostało prawidłow dodane do bazy danych.
Dodanie Entity Framework Core do ASP.NET Core

Jak to wszystko działa?

Usługi są dodawane do ConfigureServices. Typowy wzorzec to wywołanie metody Add{Service}, a potem wywołanie wszystkich metod services.Configure{Service}. Identity jest konfigurowane z domyślnymi wartościami. Usługi są dostępne dla aplikacji poprzez  dependency injection. Identity jest włączone poprzez wywołanie UseAuthentication.

Jak działają poszczególne metody możemy przeczytać na tej stronie.

Tworzenie projektu baz danych w Visual Studio 2019 Community Edition

W tym poście zobaczymy jak stworzyć projekt bazy danych przy użyciu Visual Studio 2019 Community Edition (opis jak zainstalować Visual Studio znajdziecie tutaj) i SQL Server 2017 Developer Edition (opis instalacji znajdziecie tutaj).
Na początek otwieramy SSMS 2017 (czyli SQL Server Management Studio 2017), logujemy się do naszej instancji SQLCOURSE2017 i tworzymy nową bazę danych o nazwie ETDatabase. Aby to zrobić klikamy ikonę New Query i w oknie dialogowym wpisujemy następujące polecenia. Po wpisaniu polecenia klikamy przycisk Execute.

Use master;
GO
CREATE DATABASE ETDatabase;
GO

Tworzenie projektu baz danych w Visual Studio 2019 Community EditionDiagram tworzonej bazy danych jest prosty i wygląda tak:
worzenie projektu baz danych w Visual Studio 2019 Community Edition
W Visual Studio wybieramy Create a new project.
Tworzenie projektu baz danych w Visual Studio 2019 Community Edition
W oknie wyszukiwania wpisujemy Sql, a następnie z podpowiedzi wybieramy SQL Server Database Project. Projektów baz danych używa się do tworzenia nowych baz danych, nowych aplikacji bazodanowych (data-tier application) oraz do aktualizacji istniejących baz danych i aplikacji bazodanowychKlikamy przycisk Next.
Tworzenie projektu baz danych w Visual Studio 2019 Community Edition
Na dysku tworzymy najpierw folder o nazwie ET, a w nim folder RDBMS. W tej lokalizacji tworzymy nasz projekt bazodanowy o nazwie ET. Klikamy przycisk Create.
Tworzenie projektu baz danych w Visual Studio 2019 Community Edition
Teraz importujemy naszą bazę danych ETDatabase do projektu bazy danych. W tym celu prawym przyciskiem myszy klikamy na projekcie ET w Solution Explorer i wybieramy najpierw Import, a potem Database.
Tworzenie projektu baz danych w Visual Studio 2019 Community Edition
W oknie dialogowym Import Database klikamy przycisk Select Connection.
Tworzenie projektu baz danych w Visual Studio 2019 Community Edition
W oknie dialogowym Connect podajemy nazwę serwera i nazwę bazy danych i klikamy przycisk Connect.
Tworzenie projektu baz danych w Visual Studio 2019 Community Edition
Teraz w oknie dialogowym Import Database pod Source database connection powinniśmy zobaczyć połączenie do naszej bazy danych. Klikamy przycisk Start.
Tworzenie projektu baz danych w Visual Studio 2019 Community Edition
Przeglądamy podsumowanie i klikamy przycisk Finish.
Tworzenie projektu baz danych w Visual Studio 2019 Community Edition
Kiedy nasza baza danych jest już połączona z projektem, możemy rozpocząć tworzenie pierwszej tabeli.
Dodanie tabel do projektu SQL 
Prawym przyciskiem myszy klikamy na projekcie ET (ten pogrubiony napis), wybieramy Add,  a potem New Folder. Zmieniamy nazwę folderu na dbo (folder ten będzie przechowywał wszystkie obiekty należące do schematu dbo). Następnie klikamy prawym przyciskiem myszy na folderze dbo, wybieramy Add,  a potem New Folder. Zmieniamy nazwę folderu na Tables (folder ten będzie przechowywał wszystkie tabele należące do schematu dbo).
Tworzenie projektu baz danych w Visual Studio 2019 Community Edition
Klikamy prawym przyciskiem myszy na folderze Tables. Z opcji wybieramy Add, a potem Table. Zmieniamy nazwę tabeli na tUsers i klikamy przycisk Add.
Zostanie utworzony plik tUsers.sql. Dodajemy do tego pliku następujący kod:

CREATE TABLE dbo.tUsers
(
	UserID INT IDENTITY (1,1) NOT NULL,
	Nickname NVARCHAR(8) NOT NULL,
	Pass NVARCHAR(12) NOT NULL,
	FirstName NVARCHAR(25) NOT NULL,
	LastName NVARCHAR(25) NOT NULL,
	Age INT NOT NULL,
	Email NVARCHAR(100) NOT NULL,
	PhoneNumber NVARCHAR(11),
	ImageColumn VARBINARY (MAX),
	CONSTRAINT PK_tUsers_UserID PRIMARY KEY CLUSTERED (UserID ASC),
	CONSTRAINT AK_tUsers_Nickname UNIQUE (Nickname ASC)
);
GO
EXECUTE sp_addextendedproperty
	@name = N'MS_Description',
	@value = N'Contains info about user.',
	@level0type = N'SCHEMA',
	@level0name = N'dbo',
	@level1type = N'TABLE',
	@level1name = N'tUsers';
GO

Tworzenie projektu baz danych w Visual Studio 2019 Community Edition
Ograniczenia na tabeli typu klucz obcy czy klucz główny możemy dodać też w inny sposób:

CREATE TABLE dbo.tUsers
(
UserID INT IDENTITY (1,1) NOT NULL,
Nickname NVARCHAR(8) NOT NULL,
Pass NVARCHAR(12) NOT NULL,
FirstName NVARCHAR(25) NOT NULL,
LastName NVARCHAR(25) NOT NULL,
Age INT NOT NULL,
Email NVARCHAR(100) NOT NULL,
PhoneNumber NVARCHAR(11),
ImageColumn VARBINARY (MAX)
);
GO
ALTER TABLE dbo.tUsers
ADD CONSTRAINT PK_tUsers_UserID PRIMARY KEY CLUSTERED (UserID);
GO
ALTER TABLE dbo.tUsers
ADD CONSTRAINT AK_tUsers_Nickname UNIQUE (Nickname);
GO

Teraz możemy dodać do naszego projektu kolejne tabele.
Jako drugą dodajemy tabelę dbo.tLocations. Wykonujemy te same czynności jak w przypadku tabeli dbo.tUsers, tzn. w folderze Tables tworzymy nową tabelę, zmieniamy odpowiednio jej nazwę i dodajemy kod.

CREATE TABLE dbo.tLocations
(
LocationID INT IDENTITY (1,1) NOT NULL,
Country NVARCHAR(50) NOT NULL,
Region NVARCHAR(50) NOT NULL,
County NVARCHAR(50) NULL,
City NVARCHAR(50) NOT NULL,
CONSTRAINT PK_tLocations_LocationID PRIMARY KEY CLUSTERED (LocationID ASC)
);
GO
EXECUTE sp_addextendedproperty
	@name = N'MS_Description',
	@value = N'Contains possible locations.',
	@level0type = N'SCHEMA',
	@level0name = N'dbo',
	@level1type = N'TABLE',
	@level1name = N'tLocations';
GO

Trzecia tabela to dbo.tAdverts. Kod tej tabeli wygląda następująco:

CREATE TABLE dbo.tAdverts
(
AdvertID INT IDENTITY (1,1) NOT NULL,
Title NVARCHAR(50) NOT NULL,
Content NVARCHAR(250) NOT NULL,
StartDate DateTime2(0) NOT NULL,
DueDate DateTime2(0) NOT NULL,
UserID INT NOT NULL,
LocationID int NOT NULL,
CONSTRAINT PK_tAdverts_AdvertID PRIMARY KEY CLUSTERED (AdvertID ASC),
CONSTRAINT FK_tAdverts_Users FOREIGN KEY (UserID) REFERENCES dbo.tUsers (UserID),
CONSTRAINT FK_tAdverts_Locations FOREIGN KEY (LocationID) REFERENCES dbo.tLocations (LocationID)
);
GO
EXECUTE sp_addextendedproperty
	@name = N'MS_Description',
	@value = N'Contains all adverts.',
	@level0type = N'SCHEMA',
	@level0name = N'dbo',
	@level1type = N'TABLE',
	@level1name = N'tAdverts';
GO

Czwarta tabela to dbo.tCategories. Jej kod znajduje się poniżej:

CREATE TABLE dbo.tCategories
(
CategoryID INT IDENTITY(1,1) NOT NULL,
CategoryName NVARCHAR(50) NOT NULL,
ParentID INT NULL,
CONSTRAINT PK_tCategories_CategoryID PRIMARY KEY CLUSTERED (CategoryID ASC)
);
GO
EXECUTE sp_addextendedproperty
	@name = N'MS_Description',
	@value = N'Contains all categories and subcategories.',
	@level0type = N'SCHEMA',
	@level0name = N'dbo',
	@level1type = N'TABLE',
	@level1name = N'tCategories';
GO

Ostatnia tabela, którą dodamy do naszej bazy danych to tabela dbo.tAdvertsCategories z następującym kodem:

CREATE TABLE dbo.tAdvertsCategories
(
	AdvertID INT NOT NULL,
	CategoryID INT NOT NULL,
	CONSTRAINT PK_tAdvertsCategories_tAdverts_tCategories PRIMARY KEY CLUSTERED (AdvertID ASC, CategoryID ASC),
	CONSTRAINT FK_tAtdvertsCategories_tAdverts FOREIGN KEY (AdvertID) REFERENCES dbo.tAdverts (AdvertID),
	CONSTRAINT FK_tAdvertsCategories_tCategories FOREIGN KEY (CategoryID) REFERENCES dbo.tCategories (CategoryID)
);
GO
EXECUTE sp_addextendedproperty
	@name = N'MS_Description',
	@value = N'Contains info about adverts and categories.',
	@level0type = N'SCHEMA',
	@level0name = N'dbo',
	@level1type = N'TABLE',
	@level1name = N'tAdvertsCategories';
GO

Z menu Build wybieramy opcję Build Solution lub klikamy przycisk F6. Powinniśmy na samym dole zobaczyć informację Build succeeded.
Tworzenie projektu baz danych w Visual Studio 2019 Community Edition
Publikowanie (publish) projektu bazy danych pozwala na umieszczenie wszystkich skryptów SQL na serwerze bazy danych i utworzenie obiektów w bazie danych.
Aby opublikować naszą bazę danych, klikamy prawym przyciskiem myszy na projekcie ET, a potem wybieramy opcję Publish.
W oknie dialogowym Publish Database klikamy przycisk Advanced.
W nowym oknie dialogowym zaznaczamy checkbox obok opcji Always re-create database. Spowoduje to usuwanie starej i tworzenie nowej bazy danych po każdym uruchomieniu skryptu.
Klikamy przycisk OK.
W oknie dialogowy Publish Database klikamy przycisk Edit. Wybieramy nasze połączenie z Recent Connections i klikamy przycisk OK.
Klikamy przycisk Publish.
Tworzenie projektu baz danych w Visual Studio 2019 Community Edition
Po kliknięciu przycisku Publish rozpoczyna się publikacja. W Visual Studio pojawia się nowa zakładka Data Tools Operations. Na zakończenie publikowania powinniśmy zobaczyć informację: Publish completed successfully. Klikając na link View Script możemy podejrzeć, jaki skrypt został uruchomiony na bazie danych.
Tworzenie projektu baz danych w Visual Studio 2019 Community Edition
Po opublikowaniu tego skryptu w SSMS 2017 możemy zobaczyć, że w bazie ETDatabase pojawiło się 5 nowych tabel (utworzonych zgodnie z definicjami podanymi w projekcie bazy danych ET).
Tworzenie projektu baz danych w Visual Studio 2019 Community Edition
Po wykonaniu tych wszystkich kroków mamy stworzony projekt baz danych i opublikowaną bazę danych na server MS SQL. Projekt pokazywany tutaj znajdziesz pod tym linkiem na Githubie.