Entity Framework Code First-eins-zu-Eins-Beziehung
Habe ich die folgenden zwei Modelle
public class Account
{
public int Id { get; set; }
public string Name { get; set; }
public int CurrentPeriodId { get; set; }
[ForeignKey("CurrentPeriodId")]
public virtual Period CurrentPeriod { get; set; }
public virtual ICollection<Period> Periods { get; set; }
}
public class Period
{
public int Id { get; set; }
public int AccountId { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public virtual Account Account { get; set; }
}
Ich versuche die folgende Abfrage ausführen:
from p in context.Periods
where p.AccountId == accountId &&
p.Id == p.Account.CurrentPeriodId
select p.StartDate
Und ich bekomme einen sql-Ausnahme sagen, "Ungültige Spalte name Account_AccountId".
Ich weiß, ich könnte dieses Konzept von der Konto-Seite und tun so etwas wie
from a in context.Accounts
where a.Id == id
select a.CurrentPeriod.StartDate
Aber ich würde gerne wissen, wie setup die Beziehung zu bekommen, die andere Abfrage, um zu arbeiten. Was bin ich?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, deine Umsetzung ist falsch. AFAIK, kann Man nicht definieren ein-zu-eins-Beziehung mit diesem Ansatz in EF.
Werfen Sie einen Blick auf die generierte Datenbank, haben Sie eine
Account_Id
Spalte definiert in IhremPeriods
Tabelle. Hier ist, was Sie zu definieren:Dann, Kontext und Initialisierung:
Weitere Informationen über die Eins-Zu-Eins-Beziehung, Lesen Herr Manavi ' s blog-Serie auf diese Adresse.
Update:
Basierend auf Ihren Kommentar, wenn Sie möchten, eine Verknüpfung zu
Account
ausPeriod
können Sie einenForeignKey
Attribut auf Ihrem Konto, den Primärschlüssel.Ein gutes Beispiel befindet sich bei diese Adresse (der Teil mit dem Titel "Karte ein Eins-zu-Null oder Eins-Beziehung")