Ich habe ein Problem beim Versuch, eine Beziehung in EF korrekt zu konfigurieren. Ich habe zuerst EF-Code verwendet, um Klassen aus einer bestehenden Datenbank zu generieren. Die erste Tabelle enthält eine Liste von Befehlen, die zweite eine Aufzeichnung des Staates hält, dass jeder Befehl in istSo erstellen Sie eine Beziehung 0..1-1 in EF6
Tables (vereinfacht):.
Instruction
-----------
InstructionID
CurrentInstructionStateHistoryID
InstructionStateHistory
-----------------------
InstructionStateHistoryID
InstructionID
State
So kann man sehen, dass es zwei Beziehungen zwischen den Tabellen - eine 1-Viele Beziehung basierend auf AnweisungID, die mich nicht interessiert, und deshalb die Eigenschaften für gelöscht haben. Die zweite Beziehung basiert auf der CurrentInstructionStateHistoryID-Eigenschaft, die auf den "aktuellen" Status der Anweisung verweist.
Die Klassen sind wie folgt:
public partial class Instruction
{
[Key]
public int InstructionID { get; set; }
public int? CurrentInstructionStateHistoryID { get; set; }
public virtual CurrentInstructionStateHistory InstructionStateHistory { get; set; }
}
public partial class InstructionStateHistory
{
[Key]
public int InstructionStateHistoryID { get; set; }
public int InstructionID { get; set; }
public string State { get; set; }
public virtual Instruction tblInstruction { get; set; }
}
Hier ist der fließend API-Setup, die Beziehung zu definieren:
modelBuilder.Entity<InstructionStateHistory>()
.HasRequired(e => e.tblInstruction)
.WithOptional(e => e.CurrentInstructionStateHistory);
Also, das alles kompiliert und ausgeführt. Aber wenn ich auf ein Stück Code wie diese:
Instruction instruction = await _dal.InstructionRepository.Find(claimID);
InstructionStateHistory history = i.CurrentInstructionStateHistory;
kann ich sehen, dass die Anweisung korrekt ausgefüllt ist, sagen wir, die Id 1234. ist, wenn ich das InstructionStateHistory Objekt untersuchen, was ich wollen sehen, ist, dass es InstructionID ist 1234, aber was ich sehe, ist, dass es InstructionStateHistoryID ist, dh ist Primärschlüssel, ist 1234 und dass es sich auf eine völlig andere Anweisung bezieht. Irgendwie muss ich EF mitteilen, dass Instruction.CurrentInstructionStateHistoryID mit InstructionStateHistory.InstructionStateHistoryID verknüpft ist. Ich habe viele Kombinationen von Datenannotationen und flüssigem Setup ausprobiert, konnte aber keine Kombination finden, die tatsächlich funktioniert, entweder bekomme ich das obige Ergebnis oder einen Laufzeitfehler. Jede Hilfe wurde dankbar angenommen!