Laden...

[gelöst] EF 6: Code First: Fremdschlüssen wird erzeugt, aber wie lesen?

Erstellt von schuppsl vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.207 Views
S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 6 Jahren
[gelöst] EF 6: Code First: Fremdschlüssen wird erzeugt, aber wie lesen?

verwendetes Datenbanksystem: <MSSQL>

Moin Community.
Ganz verstanden habe ich es wahrscheinlich noch nicht, was ich hier gemacht habe:
Habe Klassen erstellt und durch Migration die Datenbank erzeugen lassen.


 public class NlWarteSchleife
    {
        [Key]
        public long Id { get; set; }

        public NlWagen NlWagen { get; set; }

        public NlAuftrag NlAuftrag { get; set; }

        public short AuftragsAnzahl { get; set; }


        [Required]
        public DateTime AufDatum { get; set; }

        public TimeSpan AufUhrzeit { get; set; }
...

Hierbei sind NlWagen und NlAuftrag eigene Klassen.

Dadurch werden vom EF in der Tabelle NlWarteschleife zwei Fremdschlüssel erzeugt:
NlAuftrag_AuftragsNr und
NlWagen_WagenNrId

welche bei einem INSERT die entsprechenden Fremdschlüssel enthalten (und auch meckert, wenn diese nicht vorhanden sind in den Tabellen)

Also soweit prima.

Ich nutze nun ASP.NET MVC und möchte mir alle in der Tabelle NlWarteschleife eingetragenen Datensätze anzeigen.

Das geht mir dem EF ganz einfach:



private MeineDb nsdb = new MeineDb();
var alle = nsdb =Warteschleife.ToList();


Warteschleife ist hierbei das DBSet.
Soweit funktioniert es auch - ich bekomme die Datensätze.
Nur erhalte ich bei den beiden Fremdschlüsseln null.

Warum ist das so?
Weil das DbSet auf die Klasse geht - hier heißen die Felder NlAuftrag und NlWagen.

In der Tabelle aber heißen sie
NlAuftrag_AuftragsNr und
NlWagen_WagenNrId

Könnte ich nun mit Fluent Mapping die Feldnamen angleichen, erhalte ich dann die Daten?
Oder ist das so grundsätzlich falsch = falsch verstanden meinerseits?

Vielen Dank im Voraus.

P
1.090 Beiträge seit 2011
vor 6 Jahren

Bei den Fremdschlüsseln bekommst du erst mal NULL. weil EF davon Ausgeht das du die Werte nicht um bedingst brauchst und Wagen und Auftrag könnten ja noch weitere Fremschlüssel haben. So das du im Extrem Fall auf einmal die ganze DB im Speicher hast.

Wenn du die Werte brauchst kannst du das mir Include, dem EF sagen.
Entity Framework Loading Related Entities

Sollte man mal gelesen haben:

Clean Code Developer
Entwurfsmuster
Anti-Pattern

S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 6 Jahren

Also mit


 var alle = nsdb.Warteschleife.Include("NlWagen").ToList();

Geht es 😃
Ich muss natürlich auf die entsprechende ID zugreifen.

Vielen Dank!

2.207 Beiträge seit 2011
vor 6 Jahren

Hallo schubbsl,

wenn du magic strings vermeiden willst kannst du noch mit nem Lambda arbeiten wie .Include(x => x.BlubbBlubb). ...

Gruss

Coffeebean

S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 6 Jahren

Ja...dazu muss ich System.Data.Entity importieren.