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!