Laden...

Blazor Entität List zu ICollection funktioniert nicht

Erstellt von Bronstein vor 11 Monaten Letzter Beitrag vor 11 Monaten 593 Views
B
Bronstein Themenstarter:in
27 Beiträge seit 2022
vor 11 Monaten
Blazor Entität List zu ICollection funktioniert nicht

Hallo,

habe zwei Tabellen COMPANY_GROUP und COMPANY (eine COMPANY_GROUP kann mehrere COMPANY's haben)

Hierfür habe ich die folgende Klasse

public class COMPANY_GROUP
    {

        public Int16 ID { get; set; }


        [Column(Order = 0)]
        public string NAME { get; set; }

        
        [ForeignKey("COMPANY_GROUP_ID")]
        public ICollection<COMPANY> COMPANYs { get; set; }
        //public List<COMPANY> COMPANYs { get; set; } = new List<COMPANY>();
    }

Wenn ich die List in ICollection ändere speichert er den Datensatz nicht mehr in die Datenbank

Fehlermeldung:

"Test.Server.exe" (CoreCLR: clrhost): "C:\Program Files\dotnet\shared\Microsoft.NETCore.App\7.0.4\System.IO.FileSystem.dll" geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
Error. Status COde BadRequestTEXTStatusCode: 400, ReasonPhrase: 'Bad Request', Version: 1.1, Content: System.Net.Http.BrowserHttpContent, Headers:
{
Date: Fri, 12 May 2023 02:37:01 GMT
Server: Kestrel
Content-Type: application/problem+json; charset=utf-8
}

Hier spring er noch in CreateAsync  rein:

    public class ClientRepositoryCOMPANY_GROUP : IClientRepositoryCOMPANY_GROUP
   {
       string strController = "ControllerCOMPANY_GROUP";
       
       public async Task CreateAsync(COMPANY_GROUP myItem)
       {
           var response = await Http.PostAsJsonAsync("api/" + strController, myItem);
           if (response.IsSuccessStatusCode == true)
           {
               Console.WriteLine("OK");
           }
           else
           {
               Console.WriteLine("Error. Status COde " + response.StatusCode.ToString() + "TEXT" + response.ToString());
           }
       }

Aber in den Controller spring er nicht mehr, wenn ich die List nehme erreiche ich die Post Funktion

[Route("api/[controller]")]
   [ApiController]
   public class ControllerCOMPANY_GROUP : ControllerBase
   {
       ...
       [HttpPost]
       public async Task Post([FromBody] COMPANY_GROUP value)
       {
           _currentRepository.AddData(value);
           _currentRepository.SaveChanges();
           // Alle Clients benachrichtigen
           await notifyContextHub.Clients.All.SendAsync("ReceiveMessage", "All", "New");
       }
16.835 Beiträge seit 2008
vor 11 Monaten

Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.

Mach mal die Exceptions an für den gesamten Code.
Hilft uns vielleicht mehr, die echte Exception zu können - so sehen wir halt nur den unterdrückten Fehler; nicht die Exception.

B
Bronstein Themenstarter:in
27 Beiträge seit 2022
vor 11 Monaten

Du meinst STRG + ALT + E da habe ich alle Haken reingemacht dann kommt aber folgender Fehler beim Start des Projektes, siehe Screenshot

B
Bronstein Themenstarter:in
27 Beiträge seit 2022
vor 11 Monaten

Ich habe den Fehler gefunden

public ICollection<COMPANY> COMPANYs { get; set; } = new List<COMPANY>();

Das New List hat gefehlt

16.835 Beiträge seit 2008
vor 11 Monaten

Dann scheinen trotzdem Deine Exception Settings (oder was anderes) komisch zu sein, weil - obwohl die Blazor Developer Experience mit Exceptions nicht wirklich gut ist - NullRefenceExceptions, was dann hier wohl der Fall ist, trotzdem geworfen und in VS gefangen werden.

Weiterhin:

Entitäten haben in der API nichts zu suchen. Man exposed niemals die Struktur seiner Datenbank 1:1 in Form von Modellen nach Außen.
Damit verbaust Du Dir jede Möglichkeit der Anpassbarkeit ⇒ https://mycsharp.de/forum/threads/111860/artikel-drei-schichten-architektur

List macht hier kein Sinn; bei Entity Framework verwendet man zum initialiseren das HashSet.
Eine Relation kann schließlich nicht als Referenz doppelt existieren. Siehe dazu EF Core Basic Docs.