none
Wert aus Datenbank abfragen RRS feed

  • Frage

  • Hallo Leute,

    hoffe ihr könnt mir bei meinem Problem weiterhelfen.
    Ich habe eine asp.net core Anwendung mit Benutzeranmeldung.
    Über eine Benutzer / Mandantenverwaltung kann sich der Benutzer den aktuellen Mandanten auswählen.
    In einer DB.Aufgabenliste stehen alle Aufgaben aller Mandanten drinnen.

    Jetzt möchte ich aber nur die Aufgaben, welche für den aktuellen Mandanten gelten, anzeigen lassen.
    Habe mich dazu schon ein wenig im Controller gespielt, mir fehlt aber noch der letzte Schritt.
    anbei mein Code:

    var x412Context = _context.Aufgabenliste var xUserId = User.FindFirstSystem.Security.Claims.ClaimTypes.NameIdentifier).Value; var x413 = _context.UserMandant; var x413s = from x in x413 where x.UserId == xUserId select x; var sorting = from m in x412Context where m.Mandant == 2 select m;

    return View(await sorting.ToListAsync());

    In der UserMandant Tabelle gibt es eine ID,UserId und Mandant Spalte.
    In der Mandant Spalte steht der Wert den ich eigentlich auslesen möchte.

    Mit "where m.Mandant == 2" werden zB nur die Aufgaben für Mandant 2 ausgegeben.

    D.h. diese Abfrage funktioniert soweit.
    Mir fehlt also "nur" noch die Verbindung zu x413s.

    Hoffe ich konnte mein Problem halbwegs plausibel erklären und jemand kann mir verraten wie ich das bewerkstelligen kann.

    Danke
    Paul
    • Bearbeitet Paul_412 Dienstag, 4. Juli 2017 18:32
    Dienstag, 4. Juli 2017 18:30

Antworten

  • Hallo Paul,

    wenn also die Benennung auch nur ansatzweise ordentlich wäre, könnte man das in etwa so verstehen?

    [Aufgabenliste]
    ID
    MandantId
    ...

    [BenutzerZuMandanten]
    ID
    BenutzerId
    MandantId
    ...

    Und Du willst anhand deines aktuellen Benutzers eine Unterabfrage mit einbauen, so dass alle Aufgaben aller Mandanten ausgelesen werden, bei denen die MandantId der BenutzerId zugehörig ist?

    Ich für meinen Teil erledige sowas in der Regel über die Datenbank und erstelle eine Sicht, die mir die Daten zusammenführt. Dann kann ich einfach auf die (in der Sicht mit eiingebaute) Spalte BenutzerId filtern.

    Da ich aber mal denke, dass Du das mit den Entity Framewirk und Linq machen willst, schau mal hier:

      Entity Framework Core - IN clause equivalent

    Dort findest Du einige Beispiele für solche Subselects.

    Du müsstest hier selbst probieren, mit welcher Variante Du am besten zurechtkommst.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Montag, 10. Juli 2017 06:42
    Moderator
  • Hallo Paul,

    in der Datenbank bspw. so:

    CREATE VIEW qryAufgabenliste
    AS
    SELECT a.ID,
           a.MandantId,
           ...
           bzm.BenutzerId,
           ...
    FROM   Aufgabenliste a
           INNER JOIN BenutzerZuMandanten bzm ON a.MandantId = bzm.MandantId

    Die Sicht enthält also Daten aus beiden Tabellen Aufgabenliste und BenutzerZuMandanten. Hier insbesondere die BenutzerId. Und gegen die kannst Du dann filtern.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Montag, 10. Juli 2017 11:08
    Moderator

Alle Antworten

  • Hallo Paul,

    die Benennung ist etwas arg suboptimal und sorgt - zumindest bei mir - nicht unbedingt dafür, dass ich deine Struktur verstehen würde.

    Was willst Du wo und wie miteinander verbinden?

    Wo stehen die Aufgaben? Wo die Mandanten? Was ich x413s? Was x412Context?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Dienstag, 4. Juli 2017 20:41
    Moderator
  • Hallo Stefan,

    x412Context ist meine Tabelle für die Aufgabenliste.
    In dieser stehen die einzelnen Aufgaben.
    Ein Feld davon ist "Mandant"
    Und genau danach möchte ich die Daten filtern. 

    var xUserId: gibt mir die "Id" des angemeldeten Users aus.

    x413 ist meine UserMandant Tabelle in der jeder UserId eine MandantenId zugeordnet ist.

    Mit x413s möchte ich aus dieser Tabelle die der UserId zugeordnete MandantenId auslesen.

    Diese MandantenId möchte ich dann in meine Auswahl "var sorting .." integrieren.

    Hoffe dass das jetzt halbwegs verständlich war.

    Gruß
    Paul 

    Sonntag, 9. Juli 2017 22:17
  • Hallo Paul,

    wenn also die Benennung auch nur ansatzweise ordentlich wäre, könnte man das in etwa so verstehen?

    [Aufgabenliste]
    ID
    MandantId
    ...

    [BenutzerZuMandanten]
    ID
    BenutzerId
    MandantId
    ...

    Und Du willst anhand deines aktuellen Benutzers eine Unterabfrage mit einbauen, so dass alle Aufgaben aller Mandanten ausgelesen werden, bei denen die MandantId der BenutzerId zugehörig ist?

    Ich für meinen Teil erledige sowas in der Regel über die Datenbank und erstelle eine Sicht, die mir die Daten zusammenführt. Dann kann ich einfach auf die (in der Sicht mit eiingebaute) Spalte BenutzerId filtern.

    Da ich aber mal denke, dass Du das mit den Entity Framewirk und Linq machen willst, schau mal hier:

      Entity Framework Core - IN clause equivalent

    Dort findest Du einige Beispiele für solche Subselects.

    Du müsstest hier selbst probieren, mit welcher Variante Du am besten zurechtkommst.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Montag, 10. Juli 2017 06:42
    Moderator
  • [Aufgabenliste]

    ID
    MandantId
    ...

    [BenutzerZuMandanten]
    ID
    BenutzerId
    MandantId
    ...

    Die Auflistung ist soweit korrekt.

    Und Du willst anhand deines aktuellen Benutzers eine Unterabfrage mit einbauen, so dass alle Aufgaben aller Mandanten ausgelesen werden, bei denen die MandantId der BenutzerId zugehörig ist?

    Ich für meinen Teil erledige sowas in der Regel über die Datenbank und erstelle eine Sicht, die mir die Daten zusammenführt. Dann kann ich einfach auf die (in der Sicht mit eingebaute) Spalte BenutzerId filtern.

    Kannst du mir auch verraten wie du diese Sicht erstellst und dann filterst?

    Danke Paul

    Montag, 10. Juli 2017 10:28
  • Hallo Paul,

    in der Datenbank bspw. so:

    CREATE VIEW qryAufgabenliste
    AS
    SELECT a.ID,
           a.MandantId,
           ...
           bzm.BenutzerId,
           ...
    FROM   Aufgabenliste a
           INNER JOIN BenutzerZuMandanten bzm ON a.MandantId = bzm.MandantId

    Die Sicht enthält also Daten aus beiden Tabellen Aufgabenliste und BenutzerZuMandanten. Hier insbesondere die BenutzerId. Und gegen die kannst Du dann filtern.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Montag, 10. Juli 2017 11:08
    Moderator