ASP.NET βάσεις δεδομένων χρησιμοποιώντας τον πυρήνα πλαισίου οντοτήτων στον πυρήνα

Ημερομηνία δημιουργίας σελίδας :

Περιβάλλον

Οπτικό Στούντιο
  • Οπτικό Στούντιο 2019
ASP.NET Πυρήνας
  • 3.1 (MVC, σελίδα ξυραφιών)
Sql Διακομιστής
  • 2019 Εξπρές

Στην αρχή

Αυτές οι συμβουλές ASP.NET βήματα για τη χρήση του Πυρήνα πλαισίου οντότητας χρησιμοποιώντας την ακόλουθη βασική προσέγγιση.

Η δημιουργία μιας βάσης δεδομένων, χρησιμοποιώντας τον Πυρήνα πλαισίου οντότητας κ.ο.κ. δεν είναι το κύριο επίκεντρο αυτών των συμβουλών, επομένως δεν θα μπούμε σε λεπτομέρειες. Χρησιμοποιούνται ASP.NET με τον ίδιο τρόπο έξω από τον Πυρήνα.

Αυτή τη φορά, sql server εγκαθίσταται σε διαφορετικό διακομιστή και συνδέεται με τον έλεγχο ταυτότητας του SQL Server. Η μόνη διαφορά από τον έλεγχο ταυτότητας των Windows που χρησιμοποιείται κατά τη διάρκεια μιας τοπικής εγκατάστασης είναι η συμβολοσειρά σύνδεσης και δεν υπάρχει διαφορά στο πρόγραμμα.

Δημιουργία πίνακα βάσης δεδομένων

Αυτές οι συμβουλές χρησιμοποιούν τον SQL Server. Εγκαταστήστε τον SQL Server στο τοπικό σας περιβάλλον ή σε οποιονδήποτε διακομιστή.

Εάν δεν έχετε βάση δεδομένων για έλεγχο, δημιουργήστε μια βάση δεδομένων.

Εάν δημιουργείτε σε SQL, όπως το ακόλουθο, αλλάξτε τη διαδρομή έκδοσης του SQL Server και το όνομα της βάσης δεδομένων ώστε να ταιριάζουν στο περιβάλλον σας.

USE [master]
GO

CREATE DATABASE [TestDatabase]
  CONTAINMENT = NONE
  ON  PRIMARY 
( NAME = N'TestDatabase', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS\MSSQL\DATA\TestDatabase.mdf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB )
  LOG ON 
( NAME = N'TestDatabase_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS\MSSQL\DATA\TestDatabase_log.ldf' , SIZE = 8192KB , MAXSIZE = 2048GB , FILEGROWTH = 65536KB )
  WITH CATALOG_COLLATION = DATABASE_DEFAULT
GO

Δημιουργήστε έναν πίνακα για δοκιμή. Ορίστε το πρωτεύον κλειδί για ενημερώσεις και διαγραφές.

Εάν θέλετε να το δημιουργήσετε σε 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

Προσθήκη εγγραφής για εμφάνιση.

Εάν θέλετε να το προσθέσετε σε 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

ASP.NET πλαίσιο οντότητας που είναι διαθέσιμο στον πυρήνα

Αυτό το στοιχείο είναι κοινό τόσο στις σελίδες MVC όσο και στις σελίδες Razor.

Εγκατάσταση πακέτου πυρήνα πλαισίου οντότητας

Μόλις δημιουργήσετε το έργο σας, λάβετε πρώτα το πακέτο από το NuGet, ώστε να μπορείτε να χρησιμοποιήσετε πρώτα τον Πυρήνα πλαισίου οντοτήτων. Το MVC είναι ένα παράδειγμα, αλλά η λειτουργία είναι η ίδια στις σελίδες ξυραφιών.

Κάντε δεξί κλικ στην επιλογή Εξαρτήσεις από το έργο και επιλέξτε Διαχείριση πακέτων NuGet.

Με την επιλογή Αναζήτηση επιλεγμένη από την καρτέλα, πληκτρολογήστε EntityFrameworkCore στο πεδίο αναζήτησης. Τα πακέτα που σχετίζονται με τον πυρήνα του πλαισίου οντοτήτων εμφανίζονται στη λίστα.

Από αυτήν τη στιγμή, θα χρησιμοποιήσω τον SQL Server, οπότε θα εγκαταστήσω τα ακόλουθα πακέτα.

  • Εάν δεν θέλετε να χρησιμοποιήσετε το πρόγραμμα εγκατάστασης, κάντε κλικ στο κουμπί "Όχι".
  • Για να χρησιμοποιήσετε το παράθυρο διαλόγου "Επιλογές" για να επιλέξετε ένα πλαίσιο κειμένου, κάντε κλικ στο κουμπί "Όχι".
  • Εάν δεν θέλετε να χρησιμοποιήσετε το microsoft Office 2003, μπορείτε να χρησιμοποιήσετε το Microsoft Office Excel για να χρησιμοποιήσετε το Excel για να χρησιμοποιήσ

Ας εγκαταστήσουμε το Microsoft.EntityFrameworkCore ως παράδειγμα, οπότε εγκαταστήστε και τα άλλα δύο.

Επιλέξτε τι θέλετε να εγκαταστήσετε και, στη συνέχεια, κάντε κλικ στο κουμπί εγκατάστασης. Η έκδοση επιλέγει τον πιο πρόσφατο σταθεροποιητή.

Ο διάλογος είναι βασικά εντάξει για να κάνετε κλικ στο ok.

Εγκαταστήστε και τα άλλα δύο.

Πιστεύω ότι η δέσμη μέτρων έχει ως εξής.

Δημιουργία μοντέλου (προγράμματος) από μια ρύθμιση παραμέτρων πίνακα βάσης δεδομένων

Εάν θέλετε να ανακτήσετε ή να ενημερώσετε δεδομένα από μια βάση δεδομένων στον Πυρήνα πλαισίου οντοτήτων, Συνήθως χρειάζεται να δημιουργήσετε ένα πρόγραμμα που είναι μοντέλο με βάση τη ρύθμιση παραμέτρων του πίνακα. Αυτό το μοντέλο ονομάζεται επίσης οντότητα ψευδωνύμου.

Όταν δημιουργείτε ένα μοντέλο, κώδικα πρώτα, μια τεχνική για τη δημιουργία πινάκων σε μια βάση δεδομένων από ένα μοντέλο (πρόγραμμα), ή Υπάρχει πρώτα η βάση δεδομένων, η οποία είναι μια τεχνική για τη δημιουργία μοντέλων (προγραμμάτων) από πίνακες. Ακολουθεί ένας απλός τρόπος με τον οποίο μπορείτε να προγραμματίσετε αυτόματα από έναν πίνακα.

Παρεμπιπτόντως, αυτά τα βήματα ASP.NET στο The Core, ώστε να μπορείτε να τα δημιουργήσετε στην κονσόλα ή την εφαρμογή επιφάνειας εργασίας με τον ίδιο τρόπο.

Αρχικά, δημιουργήστε το έργο μία φορά για να βεβαιωθείτε ότι δεν υπάρχουν σφάλματα. Εάν υπάρχει σφάλμα, δεν είναι δυνατή η δημιουργία του μοντέλου. Δεν χρειάζεται να το δημιουργήσετε αν έχετε ήδη επαληθεύσει ότι δεν υπάρχουν σφάλματα.

Από το Visual Studio, ανοίξτε την κονσόλα διαχείρισης πακέτων. Διαφορετικά, μπορείτε να το ανοίξετε από τα εργαλεία, τη Διαχείριση πακέτων NuGet και τις κονσόλες διαχείρισης πακέτων στο μενού.

Θα δείτε ένα παράθυρο παρόμοιο με το παρακάτω, οπότε βεβαιωθείτε ότι το προεπιλεγμένο έργο στην επάνω δεξιά γωνία είναι το έργο που θέλετε να μοντελοποιείτε. (Πρέπει να είστε προσεκτικοί εάν έχετε πολλά έργα)

Στο πεδίο εισαγωγής, πληκτρολογήστε το ακόλουθο κείμενο: Οι παράμετροι ποικίλλουν ανάλογα με το περιβάλλον, επομένως αλλάξτε τις εγκαίρως στην ακόλουθη περιγραφή. (ειδικά εκεί που είναι ***** ειδικότερα)

Scaffold-DbContext -Provider Microsoft.EntityFrameworkCore.SqlServer -Connection "Data Source=********\SQLEXPRESS;Database=TestDatabase;user id=********;password=**********" -f -OutputDir "Models\Database" -Context "TestDatabaseDbContext" -UseDatabaseNames -DataAnnotations

Ένα -Provider ενωτικό, όπως στην κεφαλή κάθε ονόματος, είναι το όνομα παραμέτρου, ακολουθούμενο από την τιμή αυτής της παραμέτρου.

παραμέτρου
Παράδειγμα παραμέτρου περιγραφής
Υπηρεσία παροχής Διορθώθηκε στον Microsoft.EntityFrameworkCore.SqlServer SQL Server. Εάν δεν θέλετε να χρησιμοποιήσετε το microsoft Office 2003, μπορείτε να χρησιμοποιήσετε το Microsoft Office Excel για να χρησιμοποιήσετε το Excel για να χρησιμοποιήσ
Σύνδεση Συμβολοσειρά σύνδεσης για σύνδεση με τη βάση δεδομένων. Οι συμβολοσειρές σύνδεσης μπορούν να χρησιμοποιηθούν σε άλλες κοινές εφαρμογές, επομένως γράψτε αυτό που καθορίζετε σύμφωνα με τη συμβολοσειρά σύνδεσης kineki. Τόσο ο έλεγχος ταυτότητας των Windows όσο και ο έλεγχος ταυτότητας του SQL Server είναι διαθέσιμοι. Παρεμπιπτόντως, χρησιμοποιείται μόνο προσωρινά για τη δημιουργία ενός μοντέλου, επομένως δεν χρειάζεται να γνωρίζετε την ασφάλεια μετά τη δημοσίευση της εφαρμογής για αυτήν τη συμβολοσειρά σύνδεσης. Προσέξτε να ξεφύγετε εάν έχετε ένα σύμβολο στον κωδικό πρόσβασής σας. "Προέλευση δεδομένων=Όνομα διακομιστή\SQLEXPRESS;Βάση δεδομένων=Βάση δεδομένων=Αναγνωριστικό χρήστη=Όνομα χρήστη;κωδικός πρόσβασης=********
F Εξαναγκάστε την αναγραφή ακόμα και αν υπάρχει ήδη πρόγραμμα. <Όχι >
ΈξοδοςDir Η διαδρομή φακέλου στην οποία εξάγεται ο κώδικας. Σχετική διαδρομή από το φάκελο έργου Μοντέλα\Βάση δεδομένων
Πλαίσιο Όνομα κλάσης περιβάλλοντος κατά τη χρήση του πλαισίου οντότητας Εάν το ό,τι θέλετε δεν είναι κείμενο, μπορείτε να το επιλέξετε.
Χρησιμοποιήστε ονόματα βάσης δεδομένων δεδομένων Εάν καθοριστεί, το όνομα του πίνακα της βάσης δεδομένων γίνεται το όνομα της κλάσης ως έχει. Διαφορετικά, η υπόθεση και η πολλαπλή μορφή του ονόματος της κλάσης οντότητας προσαρμόζονται σύμφωνα με τους κανόνες. <Όχι >
Σχόλια δεδομένων Εάν καθοριστεί, ο τύπος στήλης προσαρτά αυτόματα το χαρακτηριστικό DataAnnotation σε κάθε ιδιότητα. Αυτό είναι λίγο χρήσιμο εάν θέλετε να ελέγξετε αυτόματα την είσοδο ανάλογα με τον τύπο της βάσης δεδομένων. <Όχι >

Πατώντας enter για να το εκτελέσετε θα δημιουργηθεί αυτόματα κώδικας ως εξής:

Ο κωδικός μοντέλου για τον πίνακα "Χρήστης" έχει ως εξής:

[Table("User")]
public partial class User
{
  [Key]
  public int ID { get; set; }
  [Required]
  [StringLength(20)]
  public string Name { get; set; }
  [Required]
  [StringLength(20)]
  public string Password { get; set; }
  public int? Age { get; set; }
  [StringLength(200)]
  public string Email { get; set; }
  [Column(TypeName = "date")]
  public DateTime? Birthday { get; set; }
  public DateTime? UpdateDateTime { get; set; }
}

Παρεμπιπτόντως, η προειδοποίηση εμφανίζεται επειδή η συμβολοσειρά σύνδεσης παρατίθεται όπως είναι στον κώδικα της κλάσης περιβάλλοντος που δημιουργείται. Βεβαιωθείτε ότι έχετε OnConfiguring διαγράψει τις μεθόδους σε αυτήν την κλάση περιβάλλοντος μετά τη δημιουργία του κώδικα.

Καταχώρηση συμβολοσειρών σύνδεσης

Αυτή η ASP.NET επεξεργασία ειδικά για τον πυρήνα. (Εάν το προσαρμόσετε, μπορείτε να το χρησιμοποιήσετε σε άλλες εφαρμογές .NET Core, αλλά ASP.NET μπορείτε να το χειριστείτε από προεπιλογή για το Core.)

Η συμβολοσειρά σύνδεσης που καθορίστηκε στην κονσόλα διαχείρισης πακέτων χρησιμοποιήθηκε μόνο για τη δημιουργία του μοντέλου.

Η συμβολοσειρά σύνδεσης για σύνδεση με τη βάση δεδομένων ως εφαρμογή web παρατίθεται στο appsettings.json. Εάν θέλετε να αλλάξετε τον προορισμό της βάσης δεδομένων με τον οποίο θα συνδεθείτε για κάθε δομή ή δημοσίευση, μπορείτε να χρησιμοποιήσετε εφαρμογές. Μπορεί επίσης να διακλαδιστεί από Development.json, κ.λπ.

Επιπλέον, δεδομένου ότι η συμβολοσειρά σύνδεσης εδώ χρησιμοποιείται ως λειτουργία, ας λάβουμε μέτρα όπως να κάνουμε τον χρήστη σύνδεσης ειδικό χρήστη λαμβάνοντας υπόψη την ασφάλεια κ.λπ.

Εάν το ορίσετε σε appsettings.json, δημιουργήστε μια ενότητα ConnectionStrings στη ριζική ενότητα (ένα αντικείμενο και όχι ακριβώς μια ενότητα). Δημιουργήστε ένα σύνολο κλειδιών και τιμών σε αυτό. Το όνομα του κλειδιού μπορεί να είναι οτιδήποτε, αλλά θα χρησιμοποιηθεί αργότερα. Η τιμή καθορίζει μια συμβολοσειρά σύνδεσης.

{
  // 

  "ConnectionStrings": {
    "TestDatabaseDbContext": "Data Source=ServerName\\SQLEXPRESS;Database=TestDatabase;user id=UserName;password=********"
  }
}

Διάθεση πυρήνα πλαισίου οντότητας σε προγράμματα

Αυτή η ASP.NET επεξεργασία ειδικά για τον πυρήνα. (Εάν το προσαρμόσετε, μπορείτε να το χρησιμοποιήσετε σε άλλες εφαρμογές .NET Core, αλλά ASP.NET μπορείτε να το χειριστείτε από προεπιλογή για το Core.)

ASP.NET Core, κάθε παρουσία έχει χρόνο επιβίωσης, ο οποίος είναι διαφορετικός από τις κονσόλες και τις εφαρμογές επιφάνειας εργασίας. Για παράδειγμα, "Από τη στιγμή που ξεκινά η υπηρεσία Web μέχρι να διακοπεί" ή "από τη στιγμή που λαμβάνεται η αίτηση μέχρι να επιστραφεί η απόκριση". ASP.NET πυρήνα πλαισίου, ο οποίος μπορεί να τοποθετηθεί στον Πυρήνα, ServiceLifetime.Scoped καθορίζει από προεπιλογή. Αν δεν υπάρχει ειδικός λόγος, μπορείς να μείνεις έτσι.

Για να επιτρέψετε στο πρόγραμμά σας να αποκτήσει πρόσβαση στο περιβάλλον της βάσης δεδομένων, προσθέστε Startup.ConfigureServices το στο :

// 追加 (自前のクラスなので名前空間は適時合わせてください)
using DatabaseEntityFrameworkCoreMvc.Models.Database;

// 追加
using Microsoft.EntityFrameworkCore;

public class Startup
{
  // 省略

  // このメソッドはランタイムによって呼び出されます。 このメソッドを使用して、コンテナーにサービスを追加します。
  public void ConfigureServices(IServiceCollection services)
  {
    // 省略

    // 追加
    services.AddDbContext<TestDatabaseDbContext>(
      options => options.UseSqlServer(Configuration.GetConnectionString("TestDatabaseDbContext")));
  }

  // 省略

services.AddDbContext<TestDatabaseDbContext> Το όρισμα τύπου της μεθόδου καθορίζει την κλάση περιβάλλοντος που δημιουργήσατε.

options.UseSqlServer Η μέθοδος υποδεικνύει ότι χρησιμοποιείται sql server.

Configuration.GetConnectionString("TestDatabaseDbContext") Καθορίζει το όνομα κλειδιού που έχει καταχωρηθεί στο appsettings.json.

ASP.NET περίπτωση χρήσης στον πυρήνα MVC

ASP.NET είναι διάφοροι τρόποι για να χρησιμοποιήσετε τον πυρήνα πλαισίου οντοτήτων στον πυρήνα MVC.

Προσθήκη di (εισαγωγή εξάρτησης) σε ελεγκτή

Με την καταχώρηση της μεθόδου .cs services.AddDbContext κατά την εκκίνηση.cs TestDatabaseDbContext Μπορεί να εισαχθεί στον ελεγκτή.

Ένα παράδειγμα DI HomeController είναι ότι η κατασκευή έχει ένα ILogger<HomeController> logger όρισμα. Αυτό προστίθεται από το DI. Μπορείτε να TestDatabaseDbContext εισάγετε με τον ίδιο τρόπο.

Εάν HomeController θέλετε να προσθέσετε σε ένα υπάρχον , μοιάζει με αυτό: Φυσικά, μπορεί να προστεθεί σε άλλους ελεγκτές.

using DatabaseEntityFrameworkCoreMvc.Models.Database;  // 追加

// 省略

public class HomeController : Controller
{
  private readonly ILogger<HomeController> _logger;
  
  // 追加
  private readonly TestDatabaseDbContext _dbContext;
  
  public HomeController(ILogger<HomeController> logger, TestDatabaseDbContext dbContext)  // 追加
  {
    _logger = logger;
    _dbContext = dbContext;  // 追加
  }
  
  // 省略
}

Στη συνέχεια, μπορείτε να αποκτήσετε πρόσβαση στη βάση δεδομένων χρησιμοποιώντας την παρουσία του περιβάλλοντος που λάβατε σε κάθε ενέργεια.

Χρήση υποθέσεων

Ο παρακάτω κώδικας είναι ο κώδικας που χειρίζεται την καταχώρηση χρήστη και τις νέες εγγραφές. Από τώρα και στο εξής ASP.NET πυρήνα, ο πυρήνας πλαισίου οντοτήτων θα είναι κώδικας για τον καθένα, οπότε δεν θα εξηγήσω λεπτομερώς.

Το μοντέλο που δημιουργείται από τον πυρήνα του πλαισίου οντότητας εξακολουθεί να μπορεί να χρησιμοποιηθεί ως μοντέλο για ενέργειες. Μπορείτε επίσης να δημιουργήσετε ένα ξεχωριστό μοντέλο και να αναδιπλώσετε και να χρησιμοποιήσετε το μοντέλο core πλαισίου οντοτήτων.

Επίσης, το περιβάλλον απορρίπτεται αυτόματα όταν ολοκληρωθεί η αίτηση του χρήστη.

Έλεγχος σπιτιού.cs

public class HomeController : Controller
{
  private readonly TestDatabaseDbContext _dbContext;

  // 省略

  // ここから追加

  /// <summary>
  /// ユーザー一覧表示アクション。
  /// </summary>
  public IActionResult List()
  {
    // データベースから User 一覧を取得する
    var users = _dbContext.Users.ToList();
    
    // ビューに渡す
    return View(users);
  }
  
  /// <summary>
  /// ユーザー一新規登録画面。
  /// </summary>
  public IActionResult Create()
  {
    return View();
  }
  
  /// <summary>
  /// ユーザー新規登録処理。
  /// </summary>
  [HttpPost]
  public IActionResult Create(User user)
  {
    // エラーがある場合は登録画面に戻る
    if (ModelState.IsValid == false) View(user);
    
    // 更新日時設定
    user.UpdateDateTime = DateTime.Now;

    // 登録リストにユーザー追加
    _dbContext.Users.Add(user);

    // 登録を確定する
    _dbContext.SaveChanges();
    
    // 一覧画面に遷移
    return RedirectToAction(nameof(List));
  }

  // ここまで追加

  // 省略
}

Δεδομένου ότι είναι ενοχλητικό να δημιουργήσετε την οθόνη με μη αυτόματο τρόπο, η οθόνη λίστας δημιουργείται αυτόματα από σκαλωσιές.

Η Views/Home/List.cshtml αυτόματη δημιουργία έχει ως εξής:

@model IEnumerable<DatabaseEntityFrameworkCoreMvc.Models.Database.User>

@{
  ViewData["Title"] = "List";
  Layout = "~/Views/Shared/_Layout.cshtml";
}

<h1>List</h1>

<p>
  <a asp-action="Create">Create New</a>
</p>
<table class="table">
  <thead>
    <tr>
      <th>
        @Html.DisplayNameFor(model => model.ID)
      </th>
      <th>
        @Html.DisplayNameFor(model => model.Name)
      </th>
      <th>
        @Html.DisplayNameFor(model => model.Password)
      </th>
      <th>
        @Html.DisplayNameFor(model => model.Age)
      </th>
      <th>
        @Html.DisplayNameFor(model => model.Email)
      </th>
      <th>
        @Html.DisplayNameFor(model => model.Birthday)
      </th>
      <th>
        @Html.DisplayNameFor(model => model.UpdateDateTime)
      </th>
      <th></th>
    </tr>
  </thead>
  <tbody>
@foreach (var item in Model) {
    <tr>
      <td>
        @Html.DisplayFor(modelItem => item.ID)
      </td>
      <td>
        @Html.DisplayFor(modelItem => item.Name)
      </td>
      <td>
        @Html.DisplayFor(modelItem => item.Password)
      </td>
      <td>
        @Html.DisplayFor(modelItem => item.Age)
      </td>
      <td>
        @Html.DisplayFor(modelItem => item.Email)
      </td>
      <td>
        @Html.DisplayFor(modelItem => item.Birthday)
      </td>
      <td>
        @Html.DisplayFor(modelItem => item.UpdateDateTime)
      </td>
      <td>
        @Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
        @Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |
        @Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
      </td>
    </tr>
}
  </tbody>
</table>

Index.cshtml Προσθέστε μια σύνδεση στη μετάβαση οθόνης στη λίστα.

<!-- 省略 -->

<ul>
  <li><a asp-action="List">List</a></li>
</ul>

Η οθόνη εγγραφής χρήστη δημιουργείται επίσης αυτόματα.

Η Views/Home/Create.cshtml αυτόματη δημιουργία έχει ως εξής: Είναι δύσκολο να χρησιμοποιηθεί όπως είναι, γι 'αυτό το έχω διορθώσει λίγο.

@model DatabaseEntityFrameworkCoreMvc.Models.Database.User

@{
  ViewData["Title"] = "Create";
  Layout = "~/Views/Shared/_Layout.cshtml";
}

<h1>Create</h1>

<h4>User</h4>
<hr />
<div class="row">
  <div class="col-md-4">
    <form asp-action="Create">
      <div asp-validation-summary="ModelOnly" class="text-danger"></div>
      <div class="form-group">
        <label asp-for="ID" class="control-label"></label>
        <input asp-for="ID" class="form-control" />
        <span asp-validation-for="ID" class="text-danger"></span>
      </div>
      <div class="form-group">
        <label asp-for="Name" class="control-label"></label>
        <input asp-for="Name" class="form-control" />
        <span asp-validation-for="Name" class="text-danger"></span>
      </div>
      <div class="form-group">
        <label asp-for="Password" class="control-label"></label>
        <input asp-for="Password" class="form-control" type="password" /> <!-- type="password" 追加 -->
        <span asp-validation-for="Password" class="text-danger"></span>
      </div>
      <div class="form-group">
        <label asp-for="Age" class="control-label"></label>
        <input asp-for="Age" class="form-control" />
        <span asp-validation-for="Age" class="text-danger"></span>
      </div>
      <div class="form-group">
        <label asp-for="Email" class="control-label"></label>
        <input asp-for="Email" class="form-control" />
        <span asp-validation-for="Email" class="text-danger"></span>
      </div>
      <div class="form-group">
        <label asp-for="Birthday" class="control-label"></label>
        <input asp-for="Birthday" class="form-control" type="date" /> <!-- type="date" 追加 -->
        <span asp-validation-for="Birthday" class="text-danger"></span>
      </div>
      @* 更新日時は入力しないのでコメントアウト *@
      @*
      <div class="form-group">
        <label asp-for="UpdateDateTime" class="control-label"></label>
        <input asp-for="UpdateDateTime" class="form-control "/>
        <span asp-validation-for="UpdateDateTime" class="text-danger"></span>
      </div>
      *@
      <div class="form-group">
        <input type="submit" value="Create" class="btn btn-primary" />
      </div>
    </form>
  </div>
</div>

<div>
    <a asp-action="List">Back to List</a>  <!-- List に遷移するように変更 -->
</div>

@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}

Τρέξε και επιβεβαίωσε. Παρεμπιπτόντως, δεν υπάρχουν μέτρα ασφαλείας, όπως η εγγραφή κωδικού πρόσβασης, επομένως ακολουθήστε ASP.NET βασικές μεθόδους εγγραφής και εγγραφής βάσεων δεδομένων κατά τη λειτουργία.

Φυσικά, αντικατοπτρίζεται στη βάση δεδομένων.

Αυτές οι συμβουλές δεν δημιουργούν αλλαγές ή διαγραφές, επομένως μπορείτε να χρησιμοποιήσετε την επεξεργασία στα δεξιά | Λεπτομέρειες | Διαγραφή" προκαλεί επίσης σφάλμα. Μπορείτε να το δημιουργήσετε με τον ίδιο τρόπο όπως η Δημιουργία, οπότε δοκιμάστε το. Οι παραπάνω τρεις διεργασίες έχουν επίσης προστεθεί στο δείγμα κώδικα.

Για να αποκτήσετε το περιβάλλον της βάσης δεδομένων από τις Υπηρεσίες αίτησης

Η προσθήκη di σε μια κατασκευή ελεγκτή μπορεί να είναι λίγο δυσκίνητη, επειδή πρέπει να την προσθέσετε σε όλους τους ελεγκτές που χρειάζεστε. Εναλλακτικά, RequestServices μπορείτε να πάρετε από .

Δεν περιλαμβάνεται στον κωδικό του δείγματος, αλλά μπορεί να ληφθεί ως εξής.

/// <summary>
/// ユーザー一覧表示アクション。
/// </summary>
public IActionResult List()
{
  // RequestServices からデータベースコンテキストを取得する
  var dbContext = (TestDatabaseDbContext)HttpContext.RequestServices.GetService(typeof(TestDatabaseDbContext));
  
  // データベースから User 一覧を取得する
  var users = dbContext.Users.ToList();
  
  // ビューに渡す
  return View(users);
}

Δημιουργία περιβάλλοντος βάσης δεδομένων απευθείας

Χρησιμοποιείται επίσης σε κονσόλες και εφαρμογές επιφάνειας εργασίας. Μπορείτε να χρησιμοποιήσετε αυτήν τη μέθοδο χωρίς προβλήματα. Δεν συνιστάται επειδή το εύρος των συναλλαγών τείνει να είναι διφορούμενο σε εφαρμογές Web όπου είναι πιθανό να προκύψει ταυτόχρονη πρόσβαση. Ειδικότερα, οι ενημερώσεις ενδέχεται να μην μπορούν να επανέλθουν κατόπιν αιτήματος.

Εάν αποκτήσετε πρόσβαση στη βάση δεδομένων με αυτόν τον τρόπο, DbContext θα χρησιμοποιήσετε μια τεχνική για να βασίσετε το .

Πρώτα, Startup τροποποιήστε το για να εργαστείτε με Configuration static το .

public class Startup
{
  public Startup(IConfiguration configuration)
  {
    Configuration = configuration;
    ConfigurationStatic = configuration;  // 追加
  }
  
  public IConfiguration Configuration { get; }
  public static IConfiguration ConfigurationStatic { get; private set; }  // 追加

  // 省略
}

TestDatabaseDbContext Δημιουργήστε μια κλάση TestDatabaseDbContextEx που προέρχεται από και ορίστε τη συμβολοσειρά σύνδεσης appsettings.json. Εάν μπορείτε να ορίσετε μια συμβολοσειρά σύνδεσης, μπορείτε να πάρετε μια άλλη μέθοδο, όπως η μεταβίβασή της μέσω μιας κατασκευής.

using Microsoft.Extensions.Configuration;
using Microsoft.EntityFrameworkCore;

namespace DatabaseEntityFrameworkCoreMvc.Models.Database
{
  public partial class TestDatabaseDbContextEx : TestDatabaseDbContext
  {
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
      if (!optionsBuilder.IsConfigured)
      {
        optionsBuilder.UseSqlServer(Startup.ConfigurationStatic.GetConnectionString("TestDatabaseDbContext"));
      }
    }
  }
}

Εάν θέλετε να αποκτήσετε πρόσβαση στη βάση δεδομένων, δημιουργήστε και χρησιμοποιήστε παρουσίες των παραγόμενων κλάσεων.

/// <summary>
/// ユーザー一覧表示アクション。
/// </summary>
public IActionResult List()
{
  // 派生クラスのデータベースコンテキストのインスタンスを生成する
  using var dbContext = new TestDatabaseDbContextEx();
  
  // データベースから User 一覧を取得する
  var users = dbContext.Users.ToList();
  
  // ビューに渡す
  return View(users);
}

ASP.NET παράδειγμα σε μια σελίδα ξυραφιού πυρήνα

ASP.NET διάφορους τρόπους χρήσης του πυρήνα πλαισίου οντοτήτων σε μια σελίδα ξυραφιού πυρήνα.

Προσθήκη di (εισαγωγή εξάρτησης) στο μοντέλο σελίδας

Με την καταχώρηση της μεθόδου .cs services.AddDbContext κατά την εκκίνηση.cs TestDatabaseDbContext Μπορεί να εισαχθεί σε ένα μοντέλο σελίδας.

Ένα παράδειγμα DI IndexModel είναι ότι η κατασκευή έχει ένα ILogger<IndexModel> logger όρισμα. Αυτό προστίθεται από το DI. Μπορείτε να TestDatabaseDbContext εισάγετε με τον ίδιο τρόπο.

Εάν IndexModel θέλετε να προσθέσετε σε ένα υπάρχον , μοιάζει με αυτό: Φυσικά, μπορεί να προστεθεί σε άλλα μοντέλα σελίδων.

using DatabaseEntityFrameworkCoreMvc.Models.Database;  // 追加

// 省略

public class IndexModel : PageModel
{
  private readonly ILogger<IndexModel> _logger;
  
  // 追加
  private readonly TestDatabaseDbContext _dbContext;
  
  public IndexModel(ILogger<IndexModel> logger, TestDatabaseDbContext dbContext)  // 追加
  {
    _logger = logger;
    _dbContext = dbContext;  // 追加
  }
  
  // 省略
}

Στη συνέχεια, μπορείτε να αποκτήσετε πρόσβαση στη βάση δεδομένων χρησιμοποιώντας την παρουσία του περιβάλλοντος που λάβατε σε κάθε διεργασία.

Χρήση υποθέσεων

Ο παρακάτω κώδικας είναι ο κώδικας που χειρίζεται την καταχώρηση χρήστη και τις νέες εγγραφές. Τόσο ASP.NET πυρήνας του βασικού πλαισίου όσο και του πυρήνα πλαισίου οντοτήτων θα είναι κώδικας, οπότε δεν θα μπω σε λεπτομέρειες. Επίσης, το περιβάλλον απορρίπτεται αυτόματα όταν ολοκληρωθεί η αίτηση του χρήστη.

Δημιουργήστε ένα μοντέλο σελίδας για την οθόνη λίστας.

List.cshtml.cs ως εξής:

using System.Collections.Generic;
using System.Linq;
using DatabaseEntityFrameworkCoreRazor.Models.Database;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace DatabaseEntityFrameworkCoreRazor.Pages
{
  public class ListModel : PageModel
  {
    private readonly TestDatabaseDbContext _dbContext;
    
    /// <summary>
    /// 一覧に表示するためのユーザー一覧を格納します。
    /// </summary>
    public List<User> Users { get; set; }
    
    /// <summary>
    /// DI で TestDatabaseDbContext を受け取ります。
    /// </summary>
    /// <param name="dbContext"></param>
    public ListModel(TestDatabaseDbContext dbContext)
    {
      _dbContext = dbContext;
    }
    
    /// <summary>
    /// ページにアクセスされたときに呼ばれます。
    /// </summary>
    public void OnGet()
    {
      // データベースからユーザー一覧を取得します。
      Users = _dbContext.Users.ToList();
    }
  }
}

Το List.cshtml δημιουργείται ως εξής:

@page
@model DatabaseEntityFrameworkCoreRazor.Pages.ListModel
@{
}

<h1>List</h1>

<p>
  <a asp-page="Create">Create New</a>
</p>
<table class="table">
  <thead>
    <tr>
      <th>
        @Html.DisplayNameFor(model => model.Users[0].ID)
      </th>
      <th>
        @Html.DisplayNameFor(model => model.Users[0].Name)
      </th>
      <th>
        @Html.DisplayNameFor(model => model.Users[0].Password)
      </th>
      <th>
        @Html.DisplayNameFor(model => model.Users[0].Age)
      </th>
      <th>
        @Html.DisplayNameFor(model => model.Users[0].Email)
      </th>
      <th>
        @Html.DisplayNameFor(model => model.Users[0].Birthday)
      </th>
      <th>
        @Html.DisplayNameFor(model => model.Users[0].UpdateDateTime)
      </th>
      <th></th>
    </tr>
  </thead>
  <tbody>
    @foreach (var item in Model.Users)
    {
      <tr>
        <td>
          @Html.DisplayFor(modelItem => item.ID)
        </td>
        <td>
          @Html.DisplayFor(modelItem => item.Name)
        </td>
        <td>
          @Html.DisplayFor(modelItem => item.Password)
        </td>
        <td>
          @Html.DisplayFor(modelItem => item.Age)
        </td>
        <td>
          @Html.DisplayFor(modelItem => item.Email)
        </td>
        <td>
          @Html.DisplayFor(modelItem => item.Birthday)
        </td>
        <td>
          @Html.DisplayFor(modelItem => item.UpdateDateTime)
        </td>
        <td>
          <a asp-page="./Edit" asp-route-id="@item.ID">Edit</a> |
          <a asp-page="./Details" asp-route-id="@item.ID">Details</a> |
          <a asp-page="./Delete" asp-route-id="@item.ID">Delete</a>
        </td>
      </tr>
    }
  </tbody>
</table>

Προσθέστε το στο Index.cshtml, ώστε να μπορείτε να μεταβείτε στη σελίδα Λίστα.

<!-- 追加 -->
<ul>
  <li><a asp-page="List">List</a></li>
</ul>

Δημιουργήστε επίσης μια οθόνη εγγραφής χρήστη.

Δημιουργήστε.cshtml.cs κώδικα ως εξής:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using DatabaseEntityFrameworkCoreRazor.Models.Database;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace DatabaseEntityFrameworkCoreRazor.Pages
{
  public class CreateModel : PageModel
  {
    private readonly TestDatabaseDbContext _dbContext;

    /// <summary>
    /// 登録するユーザー情報を格納します。
    /// </summary>
    [BindProperty]
    public User UserInfo { get; set; }

    /// <summary>
    /// DI で TestDatabaseDbContext を受け取ります。
    /// </summary>
    /// <param name="dbContext"></param>
    public CreateModel(TestDatabaseDbContext dbContext)
    {
      _dbContext = dbContext;
    }

    /// <summary>
    /// ページにアクセスされたときに呼ばれます。
    /// </summary>
    public void OnGet()
    {
      // 画面表示時は何もしません。
    }

    /// <summary>
    /// POST が送信されたときに呼ばれる。
    /// </summary>
    public IActionResult OnPost()
    {
      // エラーがある場合は登録画面に戻る
      if (ModelState.IsValid == false) return Page();

      // 更新日時設定
      UserInfo.UpdateDateTime = DateTime.Now;

      // 登録リストにユーザー追加
      _dbContext.Users.Add(UserInfo);

      // 登録を確定する
      _dbContext.SaveChanges();

      // 一覧画面に遷移
      return RedirectToPage("List");
    }
  }
}

Δημιουργήστε το.cshtml ως εξής:

@page
@model DatabaseEntityFrameworkCoreRazor.Pages.CreateModel
@{
}

<h1>Create</h1>

<h4>User</h4>
<hr />
<div class="row">
  <div class="col-md-4">
    <form asp-action="Create">
      <div asp-validation-summary="ModelOnly" class="text-danger"></div>
      <div class="form-group">
        <label asp-for="UserInfo.ID" class="control-label"></label>
        <input asp-for="UserInfo.ID" class="form-control" />
        <span asp-validation-for="UserInfo.ID" class="text-danger"></span>
      </div>
      <div class="form-group">
        <label asp-for="UserInfo.Name" class="control-label"></label>
        <input asp-for="UserInfo.Name" class="form-control" />
        <span asp-validation-for="UserInfo.Name" class="text-danger"></span>
      </div>
      <div class="form-group">
        <label asp-for="UserInfo.Password" class="control-label"></label>
        <input asp-for="UserInfo.Password" class="form-control" type="password" />
        <span asp-validation-for="UserInfo.Password" class="text-danger"></span>
      </div>
      <div class="form-group">
        <label asp-for="UserInfo.Age" class="control-label"></label>
        <input asp-for="UserInfo.Age" class="form-control" />
        <span asp-validation-for="UserInfo.Age" class="text-danger"></span>
      </div>
      <div class="form-group">
        <label asp-for="UserInfo.Email" class="control-label"></label>
        <input asp-for="UserInfo.Email" class="form-control" />
        <span asp-validation-for="UserInfo.Email" class="text-danger"></span>
      </div>
      <div class="form-group">
        <label asp-for="UserInfo.Birthday" class="control-label"></label>
        <input asp-for="UserInfo.Birthday" class="form-control" type="date" />
        <span asp-validation-for="UserInfo.Birthday" class="text-danger"></span>
      </div>
      @*
        <div class="form-group">
          <label asp-for="UpdateDateTime" class="control-label"></label>
          <input asp-for="UpdateDateTime" class="form-control" />
          <span asp-validation-for="UpdateDateTime" class="text-danger"></span>
        </div>
      *@
      <div class="form-group">
        <input type="submit" value="Create" class="btn btn-primary" />
      </div>
    </form>
  </div>
</div>

<div>
  <a asp-page="List">Back to List</a>
</div>

Τρέξε και επιβεβαίωσε. Παρεμπιπτόντως, δεν υπάρχουν μέτρα ασφαλείας, όπως η εγγραφή κωδικού πρόσβασης, επομένως ακολουθήστε ASP.NET βασικές μεθόδους εγγραφής και εγγραφής βάσεων δεδομένων κατά τη λειτουργία.

Φυσικά, αντικατοπτρίζεται στη βάση δεδομένων.

Δεν δημιούργησα αλλαγές ή διαγραφές, επομένως δεν θέλω να γίνει επεξεργασία για να | Λεπτομέρειες | Διαγραφή" προκαλεί επίσης σφάλμα. Μπορείτε να το δημιουργήσετε με τον ίδιο τρόπο όπως η Δημιουργία, οπότε δοκιμάστε το. Οι παραπάνω τρεις διεργασίες έχουν επίσης προστεθεί στο δείγμα κώδικα.

Για να αποκτήσετε το περιβάλλον της βάσης δεδομένων από τις Υπηρεσίες αίτησης

Η προσθήκη di σε μια κατασκευή μοντέλου σελίδας είναι λίγο δυσκίνητη, επειδή πρέπει να την προσθέσετε σε όλα τα μοντέλα σελίδων που χρειάζεστε. Εναλλακτικά, RequestServices μπορείτε να πάρετε από .

Δεν περιλαμβάνεται στον κωδικό του δείγματος, αλλά μπορεί να ληφθεί ως εξής.

/// <summary>
/// ページにアクセスされたときに呼ばれます。
/// </summary>
public void OnGet()
{
  // RequestServices からデータベースコンテキストを取得する
  var dbContext = (TestDatabaseDbContext)HttpContext.RequestServices.GetService(typeof(TestDatabaseDbContext));
  
  // データベースからユーザー一覧を取得します。
  Users = dbContext.Users.ToList();
}

Δημιουργία περιβάλλοντος βάσης δεδομένων απευθείας

Χρησιμοποιείται επίσης σε κονσόλες και εφαρμογές επιφάνειας εργασίας. Μπορείτε να χρησιμοποιήσετε αυτήν τη μέθοδο χωρίς προβλήματα. Δεν συνιστάται επειδή το εύρος των συναλλαγών τείνει να είναι διφορούμενο σε εφαρμογές Web όπου είναι πιθανό να προκύψει ταυτόχρονη πρόσβαση. Ειδικότερα, οι ενημερώσεις ενδέχεται να μην μπορούν να επανέλθουν κατόπιν αιτήματος.

Εάν αποκτήσετε πρόσβαση στη βάση δεδομένων με αυτόν τον τρόπο, DbContext θα χρησιμοποιήσετε μια τεχνική για να βασίσετε το .

Πρώτα, Startup τροποποιήστε το για να εργαστείτε με Configuration static το .

public class Startup
{
  public Startup(IConfiguration configuration)
  {
    Configuration = configuration;
    ConfigurationStatic = configuration;  // 追加
  }
  
  public IConfiguration Configuration { get; }
  public static IConfiguration ConfigurationStatic { get; private set; }  // 追加

  // 省略
}

TestDatabaseDbContext Δημιουργήστε μια κλάση TestDatabaseDbContextEx που προέρχεται από και ορίστε τη συμβολοσειρά σύνδεσης appsettings.json. Εάν μπορείτε να ορίσετε μια συμβολοσειρά σύνδεσης, μπορείτε να πάρετε μια άλλη μέθοδο, όπως η μεταβίβασή της μέσω μιας κατασκευής.

using Microsoft.Extensions.Configuration;
using Microsoft.EntityFrameworkCore;

namespace DatabaseEntityFrameworkCoreRazor.Models.Database
{
  public partial class TestDatabaseDbContextEx : TestDatabaseDbContext
  {
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
      if (!optionsBuilder.IsConfigured)
      {
        optionsBuilder.UseSqlServer(Startup.ConfigurationStatic.GetConnectionString("TestDatabaseDbContext"));
      }
    }
  }
}

Εάν θέλετε να αποκτήσετε πρόσβαση στη βάση δεδομένων, δημιουργήστε και χρησιμοποιήστε παρουσίες των παραγόμενων κλάσεων.

/// <summary>
/// ページにアクセスされたときに呼ばれます。
/// </summary>
public void OnGet()
{
  // 派生クラスのデータベースコンテキストのインスタンスを生成する
  using var dbContext = new TestDatabaseDbContextEx();
    
  // データベースからユーザー一覧を取得します。
  Users = dbContext.Users.ToList();
}