Problem mit der UpdateAsync -Methode im Entity Framework Core - Daten, die in der Datenbank nicht bestehen bleibenC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Problem mit der UpdateAsync -Methode im Entity Framework Core - Daten, die in der Datenbank nicht bestehen bleiben

Post by Anonymous »

Ich arbeite an einer ASP.NET -Kernanwendung mit dem Entitäts -Framework -Core und stehe vor einem Problem mit der Methode für UpdateAsync in meinem Repository. Wenn ich versuche, einen Eintrag in der Datenbank zu aktualisieren, scheinen die Daten nicht korrekt oder erwartet zu aktualisieren. Ich habe einige Protokolle hinzugefügt, aber ich kann das Problem immer noch nicht beheben. Updateasync < /code> Methode. Die Datenbank nach dem Aufrufen von SavechangesaSync () . Changetracker .
[*] 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; }
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post