[*] Versuchte nach jeder Änderung zu zwingen. In meiner UpdateAsync Methode?
Vielen Dank im Voraus für Ihre Hilfe!
Code: Select all
public async Task UpdateAsync(Hersteller hersteller)
{
var existingHersteller = await _context.Hersteller
.Include(h => h.Modelle)
.ThenInclude(m => m.Farben)
.FirstOrDefaultAsync(h => h.Id == hersteller.Id);
if (existingHersteller != null)
{
existingHersteller.Name = hersteller.Name;
foreach (var modell in hersteller.Modelle)
{
var existingModell = existingHersteller.Modelle
.FirstOrDefault(m => m.Id == modell.Id);
if (existingModell != null)
{
existingModell.Name = modell.Name;
foreach (var farbe in modell.Farben)
{
var existingFarbe = existingModell.Farben
.FirstOrDefault(f => f.Id == farbe.Id);
if (existingFarbe != null)
{
existingFarbe.ColorName = farbe.ColorName;
existingFarbe.Preis = farbe.Preis;
}
}
}
}
await _context.SaveChangesAsync();
}
}
@page "/update/{id:int}"
@using Autohaus.Components.Models
@inject IHerstellerRepository HerstellerRepository
@inject IModellRepository ModellRepository
@inject IFarbeRepository FarbeRepository
@inject NavigationManager NavigationManager
Hersteller aktualisieren
@if (formModel == null)
{
Chargement...
}
else
{
Name des Herstellers
Modelle
Farbe
Preis
Aktualisieren
Abbrechen
}
@code {
// Paramètre 'id' passé dans l'URL pour identifier le fabricant à mettre à jour
[Parameter]
public int id { get; set; }
private HerstellerFormModel? formModel; // Le modèle contenant les données à afficher et à éditer
// Méthode qui est exécutée lors de l'initialisation de la page
protected override async Task OnInitializedAsync()
{
// Récupération du fabricant à partir de son ID
var hersteller = await HerstellerRepository.GetByIdAsync(id);
if (hersteller == null) // Si le fabricant n'existe pas, redirection vers la page d'accueil
{
NavigationManager.NavigateTo("/");
return;
}
// Récupération du premier modèle et de la première couleur associée
var firstModell = hersteller.Modelle?.FirstOrDefault();
var firstFarbe = firstModell?.Farben?.FirstOrDefault();
// Initialisation du modèle de formulaire avec les données récupérées
formModel = new HerstellerFormModel
{
HerstellerName = hersteller.Name,
ModellName = firstModell?.Name ?? "", // Si aucun modèle, chaîne vide
FarbeName = firstFarbe?.ColorName ?? "", // Si aucune couleur, chaîne vide
Preis = firstFarbe?.Preis ?? 0 // Si aucune couleur, prix égal à 0
};
}
// Méthode exécutée lors de la soumission du formulaire si les données sont valides
private async Task HandleValidSubmit()
{
if (formModel == null) return;
// Récupérer le fabricant existant
var existingHersteller = await HerstellerRepository.GetByIdAsync(id);
if (existingHersteller == null)
return;
// Récupérer ou créer le modèle
var existingModell = existingHersteller.Modelle?.FirstOrDefault();
if (existingModell == null)
{
existingModell = new Modell { Name = formModel.ModellName };
existingHersteller.Modelle.Add(existingModell);
}
else
{
existingModell.Name = formModel.ModellName;
}
// Récupérer ou créer la couleur
var existingFarbe = existingModell?.Farben?.FirstOrDefault();
if (existingFarbe == null)
{
existingFarbe = new Farbe
{
ColorName = formModel.FarbeName,
Preis = formModel.Preis
};
existingModell.Farben.Add(existingFarbe);
}
else
{
existingFarbe.ColorName = formModel.FarbeName;
existingFarbe.Preis = formModel.Preis;
}
// Mise à jour du fabricant
existingHersteller.Name = formModel.HerstellerName;
// Enregistrer les modifications dans les repositories
await HerstellerRepository.UpdateAsync(existingHersteller);
await ModellRepository.UpdateAsync(existingModell);
await FarbeRepository.UpdateAsync(existingFarbe);
// Redirection après la mise à jour
NavigationManager.NavigateTo("/");
}
// Méthode pour annuler et revenir à la page d'accueil sans effectuer de modifications
private void Cancel()
{
NavigationManager.NavigateTo("/"); // Retour à la page d'accueil
}
}
using System.ComponentModel.DataAnnotations;
namespace Autohaus.Components.Models
{
public class HerstellerFormModel
{
// Hersteller
[Required(ErrorMessage = "Bitte geben Sie den Herstellernamen an")]
public string HerstellerName { get; set; }
// Modell
[Required(ErrorMessage = "Bitte geben Sie den Modellnamen an")]
public string ModellName { get; set; }
// Farbe
[Required(ErrorMessage = "Bitte geben Sie die Farbe an")]
public string FarbeName { get; set; }
[Required(ErrorMessage = "Bitte geben Sie den Preis an")]
[Range(0.01, double.MaxValue, ErrorMessage = "Der Preis muss positiv sein.")]
public decimal Preis { get; set; }
public string Kundenname { get; set; }
public string Verkaeufername { get; set; }
}
}