Übung: Reverse Engineering über eine vorhandene Datenbank
Der Manager von Contoso Pizza hat Sie gebeten, einen Endpunkt hinzuzufügen, damit das Unternehmen Coupons in der App anzeigen kann. Die Coupons befinden sich in einer vorhandenen Datenbank. In dieser Lerneinheit erstellen Sie ein Gerüst über eine vorhandene Datenbank und ändern die daraus resultierende Entitätsklasse.
Untersuchen der Datenbank „Promotions“
Sehen Sie sich die Datenbank an, die Sie zum Generieren des Codegerüsts verwenden werden:
Erweitern Sie im Bereich Explorer das Verzeichnis Promotions, klicken Sie mit der rechten Maustaste auf die Datei Promotions.db, und wählen Sie dann Datenbank öffnen aus.
Die neue Datenbank wird im Ordner SQLite Explorer geöffnet.
Erweitern Sie im Ordner SQLite Explorer die Knoten Promotions.db und Coupons. Beachten Sie das Datenschema.
Klicken Sie mit der rechten Maustaste auf den Knoten Coupons, und wählen Sie Show table (Tabelle anzeigen) aus. Überprüfen Sie die Coupondaten.
Erstellen eines Gerüsts für den Kontext der Promotion und das Couponmodell
Nun verwenden Sie die Datenbank, um das Codegerüst zu erstellen:
Führen Sie den folgenden Befehl aus:
dotnet ef dbcontext scaffold "Data Source=Promotions/Promotions.db" Microsoft.EntityFrameworkCore.Sqlite --context-dir Data --output-dir Models
Der vorherige Befehl:
DbContext
und Modellklassen werden unter Verwendung der angegebenen Verbindungszeichenfolge erstellt.- Es wird angegeben, dass der Datenbankanbieter
Microsoft.EntityFrameworkCore.Sqlite
verwendet werden soll. - Gibt Verzeichnisse für den resultierenden
DbContext
und die Modellklassen an.
Hinweis
In dieser Übung können Sie die Warnung zur Verbindungszeichenfolge im Quellcode ignorieren. Speichern Sie Ihre Zeichenfolgen für realen Code immer an einem sicheren Ort.
Öffnen Sie Models\Coupon.cs, und prüfen Sie das Gerüstmodell.
using System; using System.Collections.Generic; namespace ContosoPizza.Models { public partial class Coupon { public int Id { get; set; } public string Description { get; set; } = null!; public DateOnly? Expiration { get; set; } } }
Da die in SQLite verfügbaren Typen im Vergleich zu C# begrenzt sind, hat das Gerüsterstellungstool Rückschlüsse hinsichtlich der zu verwendenden C#-Typen gemacht. Die Datenbankspalte
Expiration
ist als Zeichenfolge definiert, weil SQLite keinen date-Datentyp umfasst. Das Gerüsterstellungstool hat basierend auf den Daten in der Datenbank rückgeschlossen, dass der C#-TypDateOnly?
werden soll.Tipp
Wenn die Datenbank geändert wird, können Sie neue Dateigerüste generieren. Die generierten Dateien werden jedes Mal überschrieben, aber als
partial
-Klassen erstellt, damit Sie sie mit benutzerdefinierten Eigenschaften und Verhaltensweisen in Ihren eigenen, separaten Dateien erweitern können.
Hinzufügen eines Endpunkts für Coupons
Bevor Sie das Codegerüst testen können, müssen Sie der API einen Endpunkt hinzufügen. Als Nächstes fügen Sie also einen neuen API-Controller hinzu.
Informationen zur Funktionsweise von API-Controllern finden Sie unter Erstellen einer Web-API mit ASP.NET Core-Controllern.
Fügen Sie im Ordner Controllers eine Datei mit dem Namen CouponController.cs hinzu, die den folgenden Code enthält:
using ContosoPizza.Data; using ContosoPizza.Models; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; namespace ContosoPizza.Controllers; [ApiController] [Route("[controller]")] public class CouponController : ControllerBase { PromotionsContext _context; public CouponController(PromotionsContext context) { _context = context; } [HttpGet] public IEnumerable<Coupon> Get() { return _context.Coupons .AsNoTracking() .ToList(); } }
Durch diesen Code wird der API ein
api/coupon
-Endpunkt hinzugefügt.Für den Code oben gilt:
- Ein
PromotionsContext
-Objekt wird in den Konstruktor eingefügt. - Die
Get
-Methode gibt alle Coupons zurück.
- Ein
Ersetzen Sie den Kommentar
// Add the PromotionsContext
in der Datei Program.cs durch den folgenden Code:builder.Services.AddSqlite<PromotionsContext>("Data Source=Promotions/Promotions.db");
Durch diesen Code wird
PromotionsContext
beim Abhängigkeitsinjektionssystem registriert.Speichern Sie alle Änderungen, und führen Sie die App mithilfe von
dotnet run
aus.
Testen des Endpunkts
Nachdem der Endpunkt hinzugefügt wurde, testen Sie die Vorgänge für Coupons:
Wechseln Sie wie in einer früheren Übung zur Swagger-Benutzeroberfläche der API, oder aktualisieren Sie die vorhandene Benutzeroberfläche im Browser.
Erweitern Sie unter der Überschrift Coupon den GET-Vorgang, und wählen Sie dann Jetzt testen aus.
Klicken Sie auf Ausführen. Der Antworttext zeigt die Coupons aus der Datenbank an:
[ { "id": 1, "description": "Buy 1 get 1 free", "expiration": "2025-01-01T00:00:00" }, { "id": 2, "description": "4 large pizzas for $40", "expiration": "2024-06-30T00:00:00" } ]
Beachten Sie, dass
expiration
ein datetime-Wert ist.
Das ist alles! Sie haben das Gerüst aus einer vorhandenen Datenbank erstellt und geändert.