Laden...

Linq und suser_name()

Erstellt von pixfreak vor 10 Jahren Letzter Beitrag vor 10 Jahren 463 Views
P
pixfreak Themenstarter:in
36 Beiträge seit 2013
vor 10 Jahren
Linq und suser_name()

verwendetes Datenbanksystem: SQL Server 1012

Hallo zusammen,

ich habe ein altes Projekt übernommen, welches nun nach C# portiere und damit auch die ersten Schritte mit dem Entity Framework sowie Linq mache. Ich muss sagen, es gefällt mir gut und das portieren aus der VCL Welt kommt gut voran.

An einem Punkt komme ich nicht recht weiter. In der vorhandenen Datenbank werden in vielen Tabellen zwecks Tracking ein Int Feld mit Standartwert von suser_id() gesetzt. In einigen Abfragen habe ich dann Queries wie


select xxxId, ..., suser_name(benutzer) from ...

Gibt es nun irgendeinen Weg, so eine Abfrage mit einer SQL Server Funktion in ein Linq Statement einzubauen? Ok, ich werde eine eigene Projektion als select brauchen. Aber Tante google hat mir da nicht wirklich weiter geholfen.

Gut, ich könnte mir die Id als int holen und eine eigene Liste mit allen destincten UserIds (was für ein deutsch...) und den passenden Namen holen, hab dann aber schon zwei Datenstrukturen bzw. muss die selbst zusammen führen.

Ein anderer Weg wären die vorhandenen Views, aber da ergibt sich das Problem mit den nicht vorhandenen PKs und dem EF. Ich könnte auch eine View in eine table valued function sperren, aber am liebsten wäre mir halt wirklich die Abfragen in Linq zu basteln, die ich wirklich brauche, denn in der vorhandenen DB ist auch viel Müll, der aber bleiben soll/muss...

Hat da jemand eine Top für mich, wie ich dies lösen könnte, bzw. einen passenden Link?

VG pixfreak

16.842 Beiträge seit 2008
vor 10 Jahren

Wir reden hier nicht nur von LINQ, sondern im Prinzip vom Entity Framework und damit einem ORM.

Das Entity Framework konnte zumindest bei der EDMX Variante (Model Designer) auch SPs importieren, die man dann in der Gesamtheit nutzen kann.

Wahrscheinlich wirst Du aber die Code First Variante nutzen, die auch zeitgleich die neueste Variante des EF darstellt und auch als erstes alle neuen Features erhält.
Hier macht es ohnehin sinn direkt auch den Repository Pattern (optional mit UoW Pattern) anzuschauen und diszipliniert zu verwenden.

So ziemlich alles ist in Advanced Entity Framework Scenarios anschaulich abgedeckt (spielt keine Rolle ob Webanwendung oder nicht).

Das ganze Prinzip des ORM ist aber eine Kapselung der DB Schicht; hier also mitten drin mit SPs zu arbeiten ist keine gute Idee bzgl. der Trennung der Logik/Schichten.
Kann man natürlich trotzdem machen und bietet sich für manche Dinge auch an; aber man kann nicht mitten in einem LINQ Query dann das EF auffordern, eine Methode als SP auf der DB auszuführen; das geht dann nur mit dem gesamten Call.

var myEntityList = myDatabaseContext.Database.SqlQuery<MyEntity>(
            "exec MyStoredProc @MyParam",myParamValue).ToList<MyEntity>();