Inventory and Orders API for .NET C# and MySQL
ASP.NET Core- und MySQL-Code, der die letzte Einheit nicht doppelt verkauft, keine Änderung wiederholt und die Datenbankverbindungen nicht überlastet.
- .NET SDK
- C#
- ASP.NET Core
- EF Core
- MySql.EntityFrameworkCore
Bildschirmfotos
Einmaliger Preis
- 999 ₹zzgl. GST an der Kasse
- 19 $
- Laden Sie es aus Ihrer Bibliothek herunter, sobald Ihre Zahlung bestätigt ist.
- Alle künftigen Releases dieses Projekts sind ohne Aufpreis enthalten.
- Neuestes Release
- 1.0.0 · 06.11.2026
- Lizenz
- Source Code Licence
Überblick
Der vollständige Quellcode einer Lager- und Bestell-API in ASP.NET Core, EF Core und MySQL: Kategorien, Produkte, Lagerbewegungen und Bestellungen, mit 20 Endpunkten. Zwei Käufer können nicht beide die letzte Einheit bekommen, eine Wiederholung führt keine Änderung doppelt aus, und ein Ansturm von Anfragen überlastet die Datenbankverbindungen nicht. In sechs Schritten läuft sie auf Ihrem Computer.
Die meisten Lager-Beispiele funktionieren, bis zwei Personen im selben Moment die letzte Einheit kaufen, ein Client nach einer verlorenen Antwort die Anfrage wiederholt oder ein Ansturm von Anfragen die Datenbank erreicht. Inventory and Orders API for .NET C# and MySQL ist der vollständige Code für genau diese Momente, mit Ergebnissen aus echten Läufen gegen MySQL 9.7.
Was die API kann
- Kategorien und Produkte. Produkte suchen, filtern, sortieren und seitenweise abrufen, archivieren und wiederherstellen, und die Produkte auflisten, die ihren Meldebestand erreicht oder unterschritten haben.
- Lagerbestand. Lieferungen und Korrekturen erfassen, mit dem vollständigen Verlauf jeder Änderung an jedem Produkt.
- Bestellungen. Eine Bestellung aufgeben und dann ausführen oder stornieren. Beim Stornieren kommt der Bestand zurück.
- 20 Endpunkte und 2 Health Checks. Eine
.http-Datei enthält eine Anfrage für jeden Endpunkt, und Scalar ergänzt in Development eine interaktive Dokumentation.
Gebaut für die Momente, an denen eine Demo scheitert
- Zwei Käufer, eine letzte Einheit. Eine einzige Anweisung sperrt die Zeile, prüft die Menge und nimmt den Bestand. Von zwei im selben Moment gesendeten Bestellungen erhielt eine
201 Createdund die andere409 Conflict. - Eine Wiederholung führt keine Änderung doppelt aus. Bestellungen und Bestandsänderungen akzeptieren einen
Idempotency-Key. Dieselbe Bestellung, zweimal gesendet, kam als dieselbe Bestellung zurück, und der Bestand wurde nur einmal genommen. - Ein Ansturm kann den Prozess nicht beenden. Mit dem Standard-Pool von
MySql.Databeendeten 150 gleichzeitige Anfragen an eine frisch gestartete API in 17 von 26 Läufen den gesamten Prozess. Diese API lässt nur so viele Anfragen gleichzeitig laufen, wie der Verbindungspool erlaubt, und derselbe Ansturm lief in 8 von 8 Läufen fehlerfrei. 600 gleichzeitig gesendete Bestellungen wurden alle in 5,5 Sekunden angelegt, mit exakt richtigem Bestand. - Änderungen überschreiben sich nicht. Eine Änderung auf Basis einer alten Produktversion erhält ein
409, und eine Bestellung kann nur einmal ausgeführt oder storniert werden. - Klare Antworten, wenn MySQL nicht erreichbar ist. Clients erhalten ein
503mitRetry-Afterund ohne Stacktrace, und die API macht von selbst weiter, sobald MySQL wieder da ist.
Eine sorgfältige MySQL-Verbindung
- Verschlüsselt. Die Einrichtung verwendet
SslMode=Required, die README zeigt den Wechsel zuVerifyFull, und außerhalb von Development warnt die App beim Start, wenn sie den Server nicht prüft. - Minimale Rechte. Ein Konto für die API, das nur Zeilen lesen und ändern darf, und ein weiteres für Migrationen.
- Zeitlimits auf dem Server. Standardmäßig wartet eine Anweisung höchstens 5 Sekunden auf eine Zeilensperre, und ein
SELECTläuft höchstens 30 Sekunden. Sie liegen auf dem Server, weil die asynchronen Aufrufe vonMySql.Datanicht beiCommandTimeoutanhalten. - Wiederholungen, die funktionieren. Oracles Provider behandelt keinen MySQL-Fehler als vorübergehend, solange er nicht aufgeführt ist. Dieser Code führt sie auf und beginnt jede Wiederholung mit einer sauberen Verbindung.
- Migrationen als eigener Schritt. Fünf EF Core-Migrationen erstellen die fünf Tabellen, und die App migriert sich nie selbst.
Code, auf dem Sie aufbauen können
- Klare Struktur. Minimal APIs mit einem Ordner pro Funktion, in einer Solution mit getrennten Projekten für API und Daten.
- Strenge Builds. Warnungen sind Fehler, die empfohlenen Analyzer sind aktiv, und jede Paketversion steht in einer einzigen Datei.
- Einheitliche Fehler und sichere Logs. Jeder Fehler verwendet das Problem-Details-Format, Logs sind außerhalb von Development JSON, und das Passwort gelangt nie hinein.
- Geheimnisse außerhalb des Codes.
.envfür das lokale MySQL, user-secrets in der Entwicklung und überall sonst eine Umgebungsvariable.
Was nicht enthalten ist
Es ist der API-Code und sonst nichts, damit Sie wissen, was Sie ergänzen müssen:
- Keine Oberfläche. Sie antwortet mit JSON.
- Keine Anmeldung. Schalten Sie Ihre eigene Authentifizierung oder Ihr Gateway davor.
- Kein Testprojekt. Die Ergebnisse oben stammen aus Läufen gegen MySQL, nicht aus automatisierten Tests im Archiv.
- Kein Hosting. Wie Sie sie bereitstellen, entscheiden Sie selbst, und die README nennt, was der Code von seiner Umgebung erwartet.
In sechs Schritten zum Laufen bringen
- Erstellen Sie die lokalen Passwörter.
- Starten Sie MySQL mit Docker Compose.
- Geben Sie der API und den Migrationen eigene Konten.
- Erstellen Sie die Tabellen.
- Speichern Sie die Verbindungszeichenfolge.
- Starten Sie die API und öffnen Sie ihre Dokumentation.
Die README enthält alle Befehle, für macOS und Linux sowie für PowerShell. How to Set Up and Run the Inventory and Orders API (öffnet in einem neuen Tab) (auf Englisch) zeigt jeden Schritt mit dem, was er ausgeben sollte. Getestet wurde von einer sauberen Kopie auf macOS, in zsh und PowerShell 7.
So wurde sie gebaut
Die kostenlose 5-teilige Tutorialreihe How to Connect a .NET C# Web API to a MySQL Database (öffnet in einem neuen Tab) (auf Englisch) erklärt die Verbindung, die Migrationen, das Lesen und Schreiben von Daten, Transaktionen und Sperren sowie die Produktions-Checkliste hinter diesem Code.
Kostenlose Tutorial-Reihe
How to Connect a .NET C# Web API to a MySQL Database
Sie lernen lieber beim Nachbauen? Diese kostenlose Schritt-für-Schritt-Anleitung in unserem Blog zeigt, wie das Projekt entsteht.
Das bekommen Sie
Alles im Archiv, auf einen Blick.
- Version 1.0.0 des vollständigen Quellcodes: eine .NET 10-Solution mit einem API-Projekt und einem Datenprojekt
- 20 Endpunkte für Kategorien, Produkte, Bestand und Bestellungen, dazu Liveness- und Readiness-Health-Checks
- Fünf EF Core-Migrationen, die die fünf MySQL-Tabellen erstellen
- Bestellungen, die die letzte Einheit nicht doppelt verkaufen, und Idempotency-Key für Bestellungen und Bestandsänderungen
- Ein Limit für gleichzeitig laufende Anfragen, abgeleitet vom Verbindungspool, dazu ein Limit pro Client und ein Limit für die Anfragegröße
- Eine Wiederholungsstrategie und Zeitlimits auf dem Server, gebaut für Oracles MySQL-Provider
- Eine compose.yaml, die MySQL 9.7 für die Entwicklung startet, und eine .env.example
- Eine .http-Datei mit einer Anfrage für jeden Endpunkt und Scalar-Dokumentation in Development
- Eine README mit den Einrichtungsbefehlen für macOS, Linux und PowerShell, allen Einstellungen und den Schritten vor der Produktion
Gebaut mit
Die genauen Laufzeitumgebungen und Versionen, mit denen gebaut und getestet wurde.
- .NET SDK10.0.403
- C#14
- ASP.NET Core10.0.14
- EF Core10.0.14
- MySql.EntityFrameworkCore10.0.12
- MySql.Data26.10.0
- Scalar.AspNetCore2.19.0
- dotnet-ef10.0.14
- MySQL9.7.4
- Docker Compose5.6.1
Was im Archiv liegt
Der Dateibaum, den Sie nach dem Entpacken vor sich haben.
inventory-orders-api-dotnet-csharp-mysql/
- src/
- .editorconfig
- .env.example
- .gitattributes
- .gitignore
- compose.yaml
- Directory.Build.props
- Directory.Packages.props
- dotnet-tools.json
- global.json
- README.md
Was es von Ihnen braucht
Die Konten und Dienste, die es voraussetzt, damit Sie später nichts überrascht.
- Das .NET 10 SDK
- Docker Compose, über Docker Desktop oder eine andere Installation, für das lokale MySQL
- Einen MySQL-Server für die Produktion: getestet mit MySQL 9.7 LTS in Docker, nicht mit einem verwalteten Dienst
- Ihre eigene Anmeldung oder Ihr Gateway, bevor sie mit etwas in Kontakt kommt, dem Sie nicht vertrauen, denn die API ist offen
- Ein Hosting, das den Prozess neu startet, wenn er endet: Ein hängender TLS-Handshake lässt MySql.Data eine Ausnahme auslösen, die kein Code abfangen kann
- Optional: VS Code oder Visual Studio
Versionen
Alle bisherigen Versionen, die neueste zuerst.
1.0.0Neueste
Erstes Release des vollständigen Quellcodes.
- Eine Lager- und Bestell-API in ASP.NET Core und MySQL, mit 20 Endpunkten für Kategorien, Produkte, Bestand und Bestellungen.
- Zwei Käufer können nicht beide die letzte Einheit bekommen, und eine wiederholte Anfrage mit demselben Idempotency-Key führt die Änderung nicht doppelt aus.
- Ein Ansturm von Anfragen wartet, bis er an der Reihe ist, statt die Datenbankverbindungen zu überlasten.
- MySQL-Konten mit minimalen Rechten, eine verschlüsselte Verbindung, EF Core-Migrationen und eine README, die Sie vom Archiv bis zur laufenden API führt.
Source Code Licence
Was Sie damit tun dürfen
What you may and may not do with the source code you buy.
Vollständige Lizenz lesen
- What this licence covers
This licence governs every file included in a product you buy from Dewiride Store: source code, configuration, database scripts, sample data, documentation and any other file in the download. It takes effect when your payment is confirmed and applies to every release of that product that reaches your library. Files that reach your library through an annual updates membership are governed in exactly the same way.
It forms part of the Terms of Sale and Use. Where a product page states different or additional licence terms for that product, those terms prevail for that product. The membership page may likewise state different or additional licence terms for the files a membership carries, and those terms then prevail for those files.
- The licence we grant you
We grant you a perpetual, worldwide, non-exclusive, non-transferable licence to use, reproduce, adapt, translate and modify the files, and to include the result in your own work, on the conditions set out below.
Perpetual means it does not expire. Worldwide means it is not limited to any country. Non-exclusive means we license the same product to other customers. Non-transferable means you cannot pass it on to someone else.
The licence is granted to you — either you personally, or the organisation you identified when buying. Everyone working within that organisation may use the files for that organisation’s projects. Nobody outside it may.
- What you may do
- Use and change the files in your own projects, commercial or otherwise, with no limit on the number of projects.
- Build a product or a service on them and charge your own customers for it.
- Deploy the result for a client, as part of work you are doing for that client.
- Distribute the result in compiled, deployed or otherwise non-source form.
- Keep as many back-up copies as you reasonably need.
- Study, observe and test how the code works, and obtain the information you need to make it work with your own software.
The last two are yours by law under sections 52(1)(aa) to (ac) of the Indian Copyright Act, 1957, and nothing in this licence is intended to take them away.
- What you may not do
- Resell, sublicense, redistribute or publish the files themselves, in whole or in substantial part, in source form.
- Include them in a template, starter kit, course, tutorial repository or component library that you sell or give away, where the code is the thing being supplied.
- Share your account, your download links or your invoices with anyone outside your organisation.
- Publish the files in a public repository, or in any other place where they can be obtained without buying them.
- Remove or obscure the copyright and attribution notices in the source files.
- Use the files to build something whose main purpose is to compete with Dewiride Store as a supplier of the same code.
The distinction that matters is simple: you may sell what you build with the code; you may not sell the code.
- Third-party components
Our products depend on open-source libraries, frameworks and services that we did not write. Those remain under their own licences, which we do not and cannot change. Where a product includes or requires such a component, its licence is named in the product’s documentation, and complying with it is your responsibility.
- Releases
Every release of a product you own is covered by this same licence and appears in your library at no extra cost. A release you have already downloaded remains licensed to you even if we later stop publishing the product. A release that reached your library through an annual updates membership is licensed to you on these same terms, and stays licensed after the period that carried it has ended.
- Ownership
We keep ownership of the files and of the copyright in them. You own whatever you create with them: your changes, your additions and the product you build are yours.
- If this licence ends
This licence ends if you materially breach it and do not put the breach right within thirty days of us asking you to in writing. It also ends if your payment is reversed or refunded, because the purchase it depends on no longer stands. Where a membership period is refunded or reversed, the licence ends for the releases that period carried and for nothing else: anything you bought separately, or that another period carried, is unaffected.
If it ends, you must stop using the files and delete the copies you hold. Work you had already delivered to a client before that point may continue in use, so that ending this licence never breaks something your own customer relies on.
- No warranty beyond the description
The warranties and limits in section 19 and section 20 of the Terms of Sale and Use apply to this licence as well.
- Governing law
This licence is governed by the law of India, and section 24 of the Terms of Sale and Use applies to any dispute about it. If a translation and the English version differ in meaning, the English version governs.
Inventory and Orders API for .NET C# and MySQL
- 999 ₹zzgl. GST an der Kasse
- 19 $