2017-07-06 15 views
-1

Dies ist das EF CORE-Setup, das ich momentan habe.Verknüpfen eines dritten Modells in EF CORE

Telefon Modell

[ForeignKey("TelNoTypeID")] 
public int? TelNoTypeID { get; set; } 
public DropDown TelNoType { get; set; } 

Person Modell

public ICollection<Telephone> TelephoneIDs { get; set; } 

ich auch

public virtual ICollection<Telephone> TelephoneIDs { get; set; } 

DropDown-Modell versucht haben

public int DropDownID { get; set; } 
public string DisplayText { get; set; } 

Person Controller

public async Task<IActionResult> Details(int? id) 
{ 
    var person = await _context.Persons 
     .Include(p => p.Gender) 
     .Include(p => p.Title) 
     .Include(p => p.AddressIDs) 
     .Include(p => p.TelephoneIDs) 
     .SingleOrDefaultAsync(m => m.PersonID == id); 

So eine Sammlung von Telefonnummern werden gegen die Person Modell gespeichert.

Dies zurück aus der Datenbank und zeigt auf dem Bildschirm bringt den numerischen Wert aus dem Feld

Telephones.TelNoTypeID 

Die äquivalente SQL zu dem, was ich habe, ist

select Telephones.TelNoTypeID from Person 
inner join Telephones on Telephones.PersonID = Person.PersonID 

Ich brauche den verknüpften Text angezeigt werden Wert stattdessen, die in

DropDown.displaytext 

gespeichert wird Das Äquivalent SQL, was ich brauche, ist

select DropDown.displaytext from Person 
inner join Telephones on Telephones.PersonID = Person.PersonID 
inner join DropDown on DropDown.DropDownID = Telephones.TelNoTypeID 

Ich habe versucht mit

.ThenInclude(p => p.<something>) 

aber die Dot-Notation bezieht sich nur auf die generische Auflistung Eigenschaften/Methoden, nicht zurück zu meiner Person, Drop-Down-oder Telefon-Modelle

Ich habe verknüpfte das Personenmodell direkt mit dem Dropdown-Modell, wobei der Dropdown-Anzeigetext mit

verwendet wurde. Personenmodell

[ForeignKey("GenderID")] 
public int? GenderID { get; set; } 
public virtual DropDown Gender { get; set; } 

aber trotz des gleichen Code in Telefon setzen, es funktioniert nicht

Wie kann ich ein drittes Modell (DropDown) zu einem zweiten Modell (Telefon) verknüpfen?

Dank

+0

'.Include (p => p.Gender)', warum? Ist das Geschlecht eine andere Klasse/Tabelle? Das gleiche für Titel usw. –

+0

Veröffentlichen Sie die vollständigen (aber abgekürzten) Klassen. Was ist p.AddressIDs? Und ist DisplayText persönlich oder in DropDown? –

Antwort

-2

ich dem Drop-Down-Modell zu verbinden versuchte, stellt sich heraus, ich auf die Eigenschaft verbinden benötigt, so

var person = await _context.Persons 
     .Include(p => p.Gender) 
     .Include(p => p.Title) 
     .Include(p => p.AddressIDs) 
     .Include(p => p.TelephoneIDs) 
      .ThenInclude(p => p.TelNoType) 
     //.Include("TelephoneIDs.TelNoType.DisplayText") 
     .SingleOrDefaultAsync(m => m.PersonID == id); 

Ich verstehe nicht, warum, ich bin Vermutung ist es, weil Die Links existieren bereits zwischen den 3 Modellen und der ThenInclude verweist auf die exakte Eigenschaft, mit der ich verlinken möchte.

Verwandte Themen