Versions- und Abhängigkeitschaos - jetzt eher Bug?

  • C#

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Mika2828.

    Versions- und Abhängigkeitschaos - jetzt eher Bug?

    Hallole,

    ich bastele gerade ein bisschen mit Blazor (WASM) rum, und wollte dort eine einfache Tabelle von meinem PostgreSQL-Server anzeigen lassen.

    --EDIT:--
    Das unten geschriebene bezieht sich auf meinen Ansatz mit WASM, also Blazor WebAssembly. Bastele ich das Ganze um in eine Blazor - Server App, dann funktioniert es!!
    -- END EDIT --

    HTML-Quellcode

    1. @page "/zuege"
    2. @using DSO_Web.Model;
    3. @using DSO_Web.Services;
    4. @inherits OwningComponentBase<DSOService>;
    5. <h3>Züge</h3>
    6. <table>
    7. <thead>
    8. Header
    9. </thead>
    10. <tr>
    11. <th>Lager</th>
    12. </tr>
    13. @foreach (var item in liste) {
    14. <tr>
    15. <td>
    16. @item
    17. </td>
    18. </tr>
    19. }
    20. </table>
    21. @code {
    22. public List<ZugEntity> liste;
    23. protected override void OnInitialized() {
    24. liste = Service.Züge();
    25. }
    26. }




    C#-Quellcode

    1. public class DSOService {
    2. protected readonly DSOContext dso;
    3. public DSOService(DSOContext db) {
    4. dso = db;
    5. }
    6. public List<ZugEntity> Züge() {
    7. try {
    8. return dso.Züge.ToList();
    9. }
    10. catch (Exception ex) {
    11. ZugEntity zug = new ZugEntity();
    12. zug.Lager = ex.Message;
    13. List<ZugEntity> ret = new List<ZugEntity>();
    14. ret.Add(zug);
    15. return ret;
    16. }
    17. }
    18. }



    C#-Quellcode

    1. public class DSOContext :DbContext {
    2. public virtual DbSet<ZugEntity> Züge { get; set; }
    3. public DSOContext(DbContextOptions<DSOContext> options): base(options){
    4. }
    5. }



    C#-Quellcode

    1. public static async Task Main(string[] args) {
    2. var builder = WebAssemblyHostBuilder.CreateDefault(args);
    3. builder.RootComponents.Add<App>("#app");
    4. builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
    5. builder.Services.AddEntityFrameworkNpgsql()
    6. .AddDbContext<DSOContext>(o => o.UseNpgsql("..."));
    7. builder.Services.AddEntityFrameworkSqlServer()
    8. .AddDbContext<CaLaboContext>(xx => xx.UseSqlServer("..."));
    9. builder.Services.AddScoped<DSOService>();
    10. builder.Services.AddScoped<CaLService>();
    11. await builder.Build().RunAsync();
    12. }


    Das klappt natürlich nicht auf Anhieb und die Fehlermeldung ist irgendwie blödsinnig.

    System.Net.NameResolution is not supported on this platform.


    Mache ich das alles nur mit dem SQL-Server, dann kommt die Meldung

    System.Data.SQLClient not supported on this platform


    Der Fehler tritt dann auf, wenn ich über den Context auf DBSet (dso.Züge.ToList()) zugreife, daher der try-catch-Block.

    Eine Recherche im Netz brachte zumindest den Hinweis, dass das Problem mit den Abhängigkeiten der verwendeten Pakete zusammenhängen könnte. Und ich muss sagen, ich blicke das grad nicht so ganz, bin eher verwirrt.

    Als Zielplattform ist angegeben .NET 5.0

    Folgende Pakete sind für den Datenbankzugriff installiert:
    Npgsql.EntityFrameworkCore.PotsgreSQL v5.0.5.1
    Microsoft.EntityFramework.Core v5.0.5


    Ich kann hier keine Konflikte erkennen.

    Oder kommt das Problem von wo ganz woanders her? Zumindest meinem Empfinden nach, mache ich das alles doch nach Lehrbuch, oder?

    Gruß

    MQ

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „MasterQ“ ()

    Normal arbeitet man bei Blazor Wasm mit einer Server WebAPI. Die WebApi stellt Funktionen zum abrufen deiner Daten zur Verfügung und greift auf die Datenbank zu.
    Dein Code läuft ja auf dem Client. Der Client (Browser) unterstützt aber keine direkte Datenbankverbindung und hätte sowieso keinen Zugriff auf deine PostgreDB.

    Das ist auch der Grund warum dein Code bei Blazor Server funktioniert. Bei Blazor Server rendert dein Server das HTML vor. Dein Server hat zugriff auf die Datenbank. Der Client zeigt einfach nur das klassische HTML an.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Mika2828“ ()