Wie kann ich eine Eltern-Kind-Beziehung zuordnen, in der der Kindertyp von der Diskriminatorfeld des Elternteils abhängt
Posted: 15 May 2025, 00:56
Ich muss eine vorhandene Datenbank mithilfe von Entity Framework 6 abbilden, um (nur) Daten zu lesen. />I have simplified my real situation to the simplest in the following model:

Eigenschaft von fruitbox zu bananabox zu bewegen (und zu Kirchenkasten>) ohne Erfolg. Ansatz).

- Tabelle besitzt eine Diskriminatorin Spalte, die "Banane" oder "Kirsche" sein kann.
Code: Select all
FruitBox
- Tabelle besitzt (Art von) eine Fremdschlüssel, die auf Banane oder Kirsch zeigt, abhängig von Diskriminator Wert.
Code: Select all
Fruitbox
Tabelle (Code: Select all
FruitBox
) zu bananabox Entität mit einer Banane KindCode: Select all
Discriminator = "Banana"
- Tabelle (
Code: Select all
FruitBox
) an Cherrybox Entität mit einer Kirsche childCode: Select all
Discriminator = "Cherry"
Code: Select all
[Table("FruitBox")]
public abstract class FruitBox
{
[Key]
public Guid FruitBoxId { get; set; }
///
/// Discriminator can be "Banana" or "Cherry"
///
public string Discriminator { get; set; }
///
/// FK to the "Banana" or "Cherry" child, depending on Discriminator
///
public Guid FruitId { get; set; }
}
public class BananaBox : FruitBox
{
public Banana MyBanana { get; set; }
}
public class CherryBox : FruitBox
{
public Cherry MyCherry { get; set; }
}
[Table("Banana")]
public class Banana
{
[Key]
public Guid BananaId { get; set; }
public ICollection MyBananaBoxes { get; set; }
}
[Table("Cherry")]
public class Cherry
{
[Key]
public Guid CherryId { get; set; }
public ICollection MyCherryBoxes { get; set; }
}
< /code>
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.Map(m => m.Requires("Discriminator").HasValue("Banana"))
.Map(m => m.Requires("Discriminator").HasValue("Cherry"))
modelBuilder.Entity()
.HasRequired(bb => bb.MyBanana)
.WithMany(b => b.MyBananaBoxes)
.HasForeignKey(bb => bb.FruitId);
modelBuilder.Entity()
.HasRequired(cb => cb.MyCherry)
.WithMany(c => c.MyCherryBoxes)
.HasForeignKey(cb => cb.FruitId);
}
< /code>
Leider beim Versuch zu lesen: < /p>
var boxes = this.DbContext.BananaBoxes.ToList()
< /code>
Die folgende Ausnahme wird ausgelöst: < /p>
System.inValidoperationException: 'Die Fremdschlüsselkomponente' fruitId 'ist kein deklariertes Eigentum auf dem Typ' bananabox '. Stellen Sie sicher, dass es nicht explizit aus dem Modell ausgeschlossen wurde und dass es sich um eine gültige primitive Eigenschaft handelt. '
Ich habe versucht, FruitId