SQL Serverin käytön valmisteleminen Entity Framework Coren avulla (tietokanta ensin)
Toimintaympäristö
- Visuaalinen studio
-
- Visuaalinen studio 2022
- .VERKKO
-
- .NET 8
- Entiteettikehyksen ydin
-
- Entity Framework Core 8.0
- SQL Server
-
- SQL Server 2022
* Yllä oleva on vahvistusympäristö, mutta se voi toimia muiden versioiden kanssa.
Alun perin
Entity Framework Core on O/R-kartoittajien kirjasto. Kun käytät tietokantaa, voit käyttää tietokannan tietueita koodissa määriteltyjen mallien (luokkien) kautta käyttämättä suoraan SQL-lauseita. Tämä tarjoaa seuraavat edut:
- Koska SQL-lauseita ei kirjoiteta suoraan, tietoturvariskit, kuten SQL-injektio, vähenevät.
- Koska SQL-lauseet ovat merkkijonoja, vaikka tekisit virheen syntaksissa, sitä ei tarkisteta rakennusvirheiden varalta, mutta koska malli on ohjelman syntaksi, voit tarkistaa virheet rakennusaikana.
Entity Framework Core voi luoda automaattisesti koodia olemassa olevista tietokannoista yhteyden muodostamiseksi näihin malleihin ja tietokantoihin. Sitä vastoin on olemassa tapa kirjoittaa koodi manuaalisesti ja luoda sitten tietokanta automaattisesti.
Ensimmäistä kutsutaan "tietokanta-ensin" ja jälkimmäistä kutsutaan "koodi-ensin". Siellä on myös "malli ensin", joka luo koodia ja tietokantoja piirustuksista, kuten ER-kaavioista, mutta sitä ei käytetä laajalti Entity Framework Coressa.
Tässä tapauksessa käytämme "tietokanta ensin" -mallia, joka luo koodin olettaen, että tietokanta on jo olemassa.
SQL Serverin asennus
Jos haluat käyttää SQL Server tietokanta tässä vihjeessä, asenna SQL Server etukäteen. Se voidaan asentaa tietokoneeseen kehitysympäristössä tai toiseen tietokoneeseen verkon kautta. Jos pystyt muodostamaan yhteyden SQL Serveriin kehitysympäristöstäsi, olet valmis. Tässä vihjeessä SQL Server asennetaan erilliseen ympäristöön.
SQL Serverin asennusvaiheet jätetään pois, koska ne ovat tarpeettomia. Seuraavilla sivuilla on SQL Serveriin liittyviä vinkkejä, joten jos haluat tietää, miten se määritetään, tutustu siihen.
Taulukon luominen
Tällä kertaa luomme seuraavan tietokannan ja taulukon Mr./Ms..
- Tietokannan nimi: TestDatabase
- Taulukon nimi: Käyttäjä
- Taulukon sarakkeet: [ID], [Nimi], [Salasana], [Ikä], [Sähköposti], [Syntymäpäivä], [UpdateDateTime]
Voit luoda sen millä tahansa tavalla, mutta jos et halua tehdä sitä, luo se suorittamalla seuraava SQL Server vastaan.
Seuraava on tietokannan luominen SQL, mutta koska tietokannan luomisen polku muuttuu versiosta riippuen jne., Voi olla luotettavampaa luoda se graafisella käyttöliittymällä tai komennolla SQL: n sijaan.
USE [master]
GO
CREATE DATABASE [TestDatabase]
CONTAINMENT = NONE
ON PRIMARY
( NAME = N'TestDatabase', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\TestDatabase.mdf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB )
LOG ON
( NAME = N'TestDatabase_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\TestDatabase_log.ldf' , SIZE = 8192KB , MAXSIZE = 2048GB , FILEGROWTH = 65536KB )
WITH CATALOG_COLLATION = DATABASE_DEFAULT, LEDGER = OFF
GO
ALTER DATABASE [TestDatabase] SET COMPATIBILITY_LEVEL = 160
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [TestDatabase].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO
ALTER DATABASE [TestDatabase] SET ANSI_NULL_DEFAULT OFF
GO
ALTER DATABASE [TestDatabase] SET ANSI_NULLS OFF
GO
ALTER DATABASE [TestDatabase] SET ANSI_PADDING OFF
GO
ALTER DATABASE [TestDatabase] SET ANSI_WARNINGS OFF
GO
ALTER DATABASE [TestDatabase] SET ARITHABORT OFF
GO
ALTER DATABASE [TestDatabase] SET AUTO_CLOSE OFF
GO
ALTER DATABASE [TestDatabase] SET AUTO_SHRINK OFF
GO
ALTER DATABASE [TestDatabase] SET AUTO_UPDATE_STATISTICS ON
GO
ALTER DATABASE [TestDatabase] SET CURSOR_CLOSE_ON_COMMIT OFF
GO
ALTER DATABASE [TestDatabase] SET CURSOR_DEFAULT GLOBAL
GO
ALTER DATABASE [TestDatabase] SET CONCAT_NULL_YIELDS_NULL OFF
GO
ALTER DATABASE [TestDatabase] SET NUMERIC_ROUNDABORT OFF
GO
ALTER DATABASE [TestDatabase] SET QUOTED_IDENTIFIER OFF
GO
ALTER DATABASE [TestDatabase] SET RECURSIVE_TRIGGERS OFF
GO
ALTER DATABASE [TestDatabase] SET DISABLE_BROKER
GO
ALTER DATABASE [TestDatabase] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
GO
ALTER DATABASE [TestDatabase] SET DATE_CORRELATION_OPTIMIZATION OFF
GO
ALTER DATABASE [TestDatabase] SET TRUSTWORTHY OFF
GO
ALTER DATABASE [TestDatabase] SET ALLOW_SNAPSHOT_ISOLATION OFF
GO
ALTER DATABASE [TestDatabase] SET PARAMETERIZATION SIMPLE
GO
ALTER DATABASE [TestDatabase] SET READ_COMMITTED_SNAPSHOT OFF
GO
ALTER DATABASE [TestDatabase] SET HONOR_BROKER_PRIORITY OFF
GO
ALTER DATABASE [TestDatabase] SET RECOVERY FULL
GO
ALTER DATABASE [TestDatabase] SET MULTI_USER
GO
ALTER DATABASE [TestDatabase] SET PAGE_VERIFY CHECKSUM
GO
ALTER DATABASE [TestDatabase] SET DB_CHAINING OFF
GO
ALTER DATABASE [TestDatabase] SET FILESTREAM( NON_TRANSACTED_ACCESS = OFF )
GO
ALTER DATABASE [TestDatabase] SET TARGET_RECOVERY_TIME = 60 SECONDS
GO
ALTER DATABASE [TestDatabase] SET DELAYED_DURABILITY = DISABLED
GO
ALTER DATABASE [TestDatabase] SET ACCELERATED_DATABASE_RECOVERY = OFF
GO
EXEC sys.sp_db_vardecimal_storage_format N'TestDatabase', N'ON'
GO
ALTER DATABASE [TestDatabase] SET QUERY_STORE = ON
GO
ALTER DATABASE [TestDatabase] SET QUERY_STORE (OPERATION_MODE = READ_WRITE, CLEANUP_POLICY = (STALE_QUERY_THRESHOLD_DAYS = 30), DATA_FLUSH_INTERVAL_SECONDS = 900, INTERVAL_LENGTH_MINUTES = 60, MAX_STORAGE_SIZE_MB = 1000, QUERY_CAPTURE_MODE = AUTO, SIZE_BASED_CLEANUP_MODE = AUTO, MAX_PLANS_PER_QUERY = 200, WAIT_STATS_CAPTURE_MODE = ON)
GO
ALTER DATABASE [TestDatabase] SET READ_WRITE
GO
Taulukon luominen SQL.
USE [TestDatabase]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[User](
[ID] [int] NOT NULL,
[Name] [nvarchar](20) NOT NULL,
[Password] [nvarchar](20) NOT NULL,
[Age] [int] NULL,
[Email] [nvarchar](200) NULL,
[Birthday] [date] NULL,
[UpdateDateTime] [datetime2](7) NULL,
CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
Tallenna liite SQL.
USE [TestDatabase]
GO
INSERT [dbo].[User] ([ID], [Name], [Password], [Age], [Email], [Birthday], [UpdateDateTime]) VALUES (1, N'氏名1', N'aaaa', 20, N'aaaa@example.com', CAST(N'2020-04-01' AS Date), CAST(N'2021-03-14T00:00:00.0000000' AS DateTime2))
GO
INSERT [dbo].[User] ([ID], [Name], [Password], [Age], [Email], [Birthday], [UpdateDateTime]) VALUES (2, N'氏名2', N'bbbb', 30, N'bbbb@example.com', CAST(N'2010-04-01' AS Date), CAST(N'2021-03-14T00:00:00.0000000' AS DateTime2))
GO
Visual Studion määritys
Oletamme, että olet jo määrittänyt myös tämän. Jos haluat tietää asennusmenettelyn jne., Yhteenveto on seuraavalla sivulla.
Luo projekti
Entity Framework Core ei ole riippuvainen mistään tietystä suoritusympäristöstä, joten sitä voidaan käyttää monissa projekteissa. Tässä artikkelissa käytämme Entity Framework Corea yksinkertaisessa konsolisovellusympäristössä.
Valitse uudessa projektissa Console App (Konsolisovellus).
Projekti on luotu. Sillä ei ole väliä, mikä projektin nimi on.
Hanki Entity Framework Core -paketti
Hanki paketti Entity Framework Coren käyttämiseen NuGetin kanssa.
Napsauta riippuvuutta hiiren kakkospainikkeella ja valitse NuGet-pakettien hallinta.
Kun välilehdeltä on valittu "Selaa", kirjoita hakukenttään EntityFrameworkCore
. Tämän jälkeen sinun pitäisi nähdä Entity Framework Coreen liittyvät paketit luettelossa.
Koska käytämme SQL Server tällä kertaa, asennamme seuraavat paketit.
- Microsoft.EntityFrameworkCore
- Microsoft.EntityFrameworkCore.Tools
- Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore
Tässä esimerkissä asennamme . Asenna myös kaksi muuta.
Valitse asennuskohde ja napsauta Asenna-painiketta. Valitse versiolle uusin vakaa.
Valintaikkuna on periaatteessa OK ja voit napsauttaa OK.
Asenna myös kaksi muuta.
Mielestäni paketti näyttää tältä:
Mallin (koodin) luominen tietokantataulukon rakenteesta
Jos haluat, että malli ja muu koodi luodaan automaattisesti, rakenna ensin projekti varmistaaksesi, ettei siinä ole virheitä. Jos tapahtuu virhe, mallin luonti epäonnistuu. Jos olet jo varmistanut, ettei virheitä ole, sinun ei tarvitse luoda sitä.
Avaa Visual Studiossa Package Manager Console. Jos sinulla ei ole sellaista, voit avata sen valikosta "Työkalut", "NuGet Package Manager", "Package Manager Console".
Seuraava ikkuna tulee näkyviin, joten varmista, että oikeassa yläkulmassa oleva "Oletusprojekti" on projekti, jolle haluat luoda mallin. (Sinun on oltava varovainen, jos sinulla on useita projekteja)
Kirjoita syöttökenttään seuraava teksti: Parametrit muuttuvat ympäristön mukaan, joten muuta niitä seuraavien selitysten mukaisesti ajoissa.
Scaffold-DbContext -Provider Microsoft.EntityFrameworkCore.SqlServer -Connection "Data Source=<サーバー名>\<インスタンス名>;Database=<データメース名>;user id=<接続ユーザー名>;password=<接続パスワード>;TrustServerCertificate=true" -f -OutputDir "<出力フォルダパス>" -Context "<コンテキストクラス名>" -UseDatabaseNames -DataAnnotations -NoPluralize
Esimerkki syötteestä
Scaffold-DbContext -Provider Microsoft.EntityFrameworkCore.SqlServer -Connection "Data Source=TestServer;Database=TestDatabase;user id=TestUser;password=pass;TrustServerCertificate=true" -f -OutputDir "Models\Database" -Context "TestDatabaseDbContext" -UseDatabaseNames -DataAnnotations -NoPluralize
Parametrin | kuvausParametrin | esimerkki |
---|---|---|
Toimittaja | varten SQL Server se Microsoft.EntityFrameworkCore.SqlServer on korjattu. |
Microsoft.EntityFrameworkCore.SqlServer |
Yhteys | Yhteysmerkkijono, jolla muodostetaan yhteys tietokantaan. Yhteysmerkkijonoja voidaan käyttää samalla tavalla kuin muita sovelluksia, joten noudata määritettävän sisällön yhteysmerkkijonojen merkintää. Voit käyttää joko Windows-todennusta tai SQL Server -todennusta. Muuten, sitä käytetään vain väliaikaisesti mallin luomiseen, joten tämän yhteysmerkkijonon sovelluksen julkaisemisen jälkeen ei tarvitse olla tietoinen turvallisuudesta. Jos salasanassasi on symboleja, varo pakenemasta. | "Tietolähde = palvelimen nimi \ SQLEXPRESS; tietokanta = testitietokanta; käyttäjätunnus=Käyttäjänimi; salasana=**********" |
f | Vaikka ohjelma olisi jo olemassa, se korvataan väkisin. | Ei <> |
PäätelmätDir | Kansiopolku, johon haluat tulostaa koodin. Polku suhteessa projektikansioon | Mallit\Tietokanta |
Asiayhteys | Kontekstiluokkien nimet entiteettikehystä käytettäessä | TestDatabaseDbContext |
UseDatabaseNames | Jos määritetty, tietokannan taulukon nimi on luokan nimi sellaisena kuin se on. Jos sitä ei ole määritetty, entiteettiluokan nimen tapausta mukautetaan sääntöjen mukaisesti. | Ei <> |
Tietojen merkinnät | Kun saraketyyppi on määritetty, se liittää DataAnnotation-määritteen automaattisesti kuhunkin ominaisuuteen. Tämä on vähän hyödyllistä, jos haluat suorittaa syöttötarkistukset automaattisesti tietokannan tyypin mukaan. | Ei <> |
Namespace | Nimitila, johon luotu entiteettiluokka kuuluu. Jos sitä ei ole määritetty, nimitila määritetään kansion mukaan. | TestNamespace |
ContextNamespace | Nimitila, johon luotu konteksti kuuluu. Jos sitä ei ole määritetty, nimitila määritetään kansion mukaan. | TestNamespace |
NoOnConfiguring | Älä upota koodiin raakoja yhteysmerkkijonoja. | Ei <> |
NoPluralize | Varmista, että kontekstin kunkin taulukon nimen ominaisuuksien nimet eivät ole monikossa. | Ei <> |
Kun painat Enter suorittaaksesi sen, koodi luodaan automaattisesti: Jos virhe tapahtuu, syy näytetään, joten vastaa virheen sisällön mukaan.
User
Taulukon mallikoodi on seuraava.
using System.ComponentModel.DataAnnotations;
namespace SetupSqlServerDatabaseFirst.Models.Database;
public partial class User
{
[Key]
public int ID { get; set; }
[StringLength(20)]
public string Name { get; set; } = null!;
[StringLength(20)]
public string Password { get; set; } = null!;
public int? Age { get; set; }
[StringLength(200)]
public string? Email { get; set; }
public DateOnly? Birthday { get; set; }
public DateTime? UpdateDateTime { get; set; }
}
Muuten, varoitus näytetään, koska yhteysmerkkijono kirjoitetaan sellaisenaan luodun kontekstiluokan koodissa. Jos mahdollista, yhteysmerkkijono tulisi tallentaa erilliseen paikkaan ja asettaa ajon aikana, mutta tässä tapauksessa se on tarkoitettu toiminnon tarkistamiseen, joten jätän sen sellaisenaan.
Yritä noutaa ja näyttää tietueita
Nyt kun meillä on koodi tietokannan tietueiden käyttämiseen, yritetään hakea tietueet ja näyttää ne konsolissa.
Program.cs
ja muuttaa sitä seuraavasti.
// See https://aka.ms/new-console-template for more information
using SetupSqlServerDatabaseFirst.Models.Database;
using System.Text.Json;
Console.WriteLine("Hello, World!");
// データベースコンテキストのインスタンスを生成する
using var dbContext = new TestDatabaseDbContext();
// データベースから User 一覧を取得する
var users = dbContext.User.ToList();
// 取得した User 情報をコンソールに書き出す
foreach (var user in users)
{
Console.WriteLine(JsonSerializer.Serialize(user));
}
Luo automaattisesti luotu DbContext
luokka new
. Se ilmoitetaan, jotta tietokantayhteydet voidaan using var
tuhota automaattisesti.
dbContext
Luo ominaisuuksia kunkin mallin käyttöä varten, joten tässä tapauksessa User
voit käsitellä taulukon User
tietueita käyttämällä ominaisuuksia.
Myönnetty SQL luodaan automaattisesti sisäisesti, eikä sitä tarvitse huomata.
ToList
Tässä laajennusmenetelmää käytetään kaikkien taulukon tietueiden noutamiseenUser
.
foreach
Loput tehdään käyttämällä ja JsonSerializer.Serialize
-menetelmiä tietojen näyttämiseksi User
konsolissa.
Kuten User
edellä mainittiin, jokainen taulukon sarake ilmoitetaan ominaisuudeksi, joten arvo on mahdollista hakea erikseen.