2 Stimmen

Beziehungsfehler im EF-Code-First

Ich habe ein eigenartiges Problem mit dieser Programmstruktur und EF 6.

public abstract class Operand
{
    public virtual int Id
    {
        get;
        set;
    }
}

public class Formula : Operand
{
    public Operand Operand1
    {
        get;
        set;
    }

    public Operand Operand2
    {
        get;
        set;
    }

    public String Operator
    {
        get;
        set;
    }

    public override int Id
    {
        get;
        set;
    }
}

public class OperandValue : Operand
{
    public T Value
    {
        get;
        set;
    }

    public override int Id
    {
        get;
        set;
    }
}

public class OperandInt : OperandValue
{
}

public class ModelEntity : DbContext
{
    public ModelEntity()
        : base("MyCnxString")
    {
        this.Configuration.LazyLoadingEnabled = true;
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Conventions.Remove();

        modelBuilder.Types()
        .Configure(c => c.ToTable(c.ClrType.Name));

        modelBuilder.Types()
        .Configure(c => c.ToTable(c.ClrType.Name));
    }

    public DbSet Formula { get; set; }
    public DbSet OperandValue { get; set; }

}

Und mein Testprogramm :

public class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Starte...");

        var migration = new TestEntity2.Migrations.Configuration();
        migration.AutomaticMigrationsEnabled = true;
        migration.AutomaticMigrationDataLossAllowed = true;

        var migrator = new System.Data.Entity.Migrations.DbMigrator(migration);
        migrator.Update();

        using (ModelEntity db = new ModelEntity())
        {
            OperandInt opValue1 = new OperandInt() { Value = 3 };
            db.OperandValue.Add(opValue1);

            OperandInt opValue2 = new OperandInt() { Value = 4 };
            db.OperandValue.Add(opValue2);

            Formula formula = new Formula() { Operand1 = opValue1, Operand2 = opValue2, Operator = "*" };
            db.Formula.Add(formula);

            db.SaveChanges();

            Console.WriteLine("Beendet !");
            Console.ReadLine();
        }
    }
}

Wenn ich dieses Programm ausführe, erhalte ich folgende Fehlermeldung :

Die Beziehung 'Formula_Operand1' entspricht keiner Beziehung, die im Konzeptmodell definiert ist.

Das Problem ist, dass "Formula" die Beziehungen der Operand1 und Operand2 Ids aufgrund der Vererbung des GenericType nicht findet.

Hast du irgendwelche Vorschläge?

Hier ist ein Link zum Klassendiagramm: http://imageshack.us/a/img443/1854/jl98.png

Vielen Dank!

0voto

Sampath Punkte 57490

Überprüfen Sie die unten aufgeführten Links. @John hat das oben genannte Problem folgendermaßen erklärt.

EF unterstützt Vererbung nicht, wie Sie es versuchen. Es funktioniert mit abstrakten Klassen, aber nicht mit nicht-virtuellen Eigenschaften. Generische Vererbung wird unterstützt, aber nicht von einer abstrakten Entität mit einer virtuellen Eigenschaft. Sie können eine abstrakte Entität haben, aber benötigen nicht-virtuelle Eigenschaften.

Weitere Informationen : G+ Lösung

Und : Vererbung mit dem Entity Framework implementieren

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X