ist ich eine Elternklasse ComponentDesign
haben:Entity Framework eine Eins-zu-eins mit einer Klasse, die manchmal unabhängig
public class ComponentDesign
{
public string Name { get; set; }
public virtual JobFile DesignFile { get; set; }
public int? DesignFileId { get; set; }
public Pdf PdfFile { get; set; }
public int? PdfFileId { get; set; }
public JobFile SealedPdfFile { get; set; }
public int? SealedPdfFileId { get; set; }
public int Id { get; set; }
public int JobId { get; set; }
}
Und ein Kind Klasse JobFile
(davon Pdf
ist eine Unterklasse):
public class JobFile
{
public int ID { get; set; }
public string Name { get; set; }
public string Url { get; set; }
public ComponentDesign ComponentDesign { get; set; }
public int? ComponentDesignId { get; set; }
public int? JobId { get; set; }
}
Diese Klassen werden mithilfe von Entity Framework in einer relationalen Datenbank gespeichert. Ich hätte gerne Navigationseigenschaften auf beiden Seiten der Beziehung, so dass ich nach Belieben componentDesign.PdfFile
oder jobFile.ComponentDesign
sagen kann.
Jede Eigenschaft des Typs JobFile
in ComponentDesign
ist optional, und ein JobFile will only ever belong to one
ComponentDesign . However, a
Job-Datei may be free-standing, not belonging to any
ComponentDesign (so
jobFile.ComponentDesign` wäre null).
Ich habe Probleme mit der Verwendung der Fluent-API, um diese Beziehung zu konfigurieren. Es ist eins zu eins. Ist es möglich, die Navigationseigenschaften auf beiden Seiten der Beziehung zu haben? Denken Sie daran, dass ein JobFile
freistehend sein kann (so dass jobFile.ComponentDesign
nicht immer relevant sein wird), so dass es JobFile
s gibt, die zu ComponentDesign
gehören und solche, die dies nicht tun. Das nächste, was ich fühle ich gekommen bin, ist dies:
modelBuilder.Entity<ComponentDesign>()
.HasOptional(componentDesign => componentDesign.DesignFile)
.WithRequired(jobFile => jobFile.ComponentDesign);
Aber das scheint mir zu zeigen, dass jobFile.ComponentDesign
ist immer dann erforderlich, was nicht der Fall ist. Ich zögere, es einfach zu versuchen, weil es einige wesentliche Migrationen erzeugt, also wollte ich zuerst eine Eingabe erhalten. Wie sollte meine Fluent API-Konfiguration für diese Situation aussehen? verstehen
Um eine Beziehung in Entity Framework zwischen zwei Objektklassen oder, sagen wir, Datatabellen zu erstellen, können Sie das virtuelle Wort mit dem Klassentyp verwenden. Ich bin sicher, dass Sie Ergebnisse mit virtuellen Eigenschaften für Ihr Problem finden können. –