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");
}
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Du meinst STRG + ALT + E da habe ich alle Haken reingemacht dann kommt aber folgender Fehler beim Start des Projektes, siehe Screenshot
Ich habe den Fehler gefunden
public ICollection<COMPANY> COMPANYs { get; set; } = new List<COMPANY>();
Das New List hat gefehlt
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code