Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Klassenvererbung mit .NET EF4.1 + MySQL

Ich war heute mit dem gleichen Problem konfrontiert, der Unterschied besteht darin, dass ich mich nicht auf Code First verlasse, um die Tabellen für mich zu erstellen, ich erstelle sie manuell, während ich gehe.

Ich habe die gegebene Beschreibung befolgt hier und ich landete auf dem gleichen Fehler wie Sie, ich habe manuell ein "Discriminator" -Feld in meiner Tabelle erstellt und seinen Typ in MEDIUMTEXT geändert, aber der Anbieter bestand darauf, dass ich irgendwie eine MaxLength-Eigenschaft bereitstellte, obwohl MEDIUMTEXT keine MaxLength wie VARCHAR hat , nehme ich an, dass dies ein Fehler des Anbieters sein muss.

Nun, um dies zu umgehen, habe ich die Fluent-API verwendet, um den Namen der Diskriminatorspalte (den ich einfach als "Discriminator" beibehalten habe) und die Werte, die EF von der Diskriminatorspalte erwarten sollte, manuell mitzuteilen. In Ihrem Fall wäre dies:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Vehicle>()
            .Map<Car>(m => m.Requires("Discriminator").HasValue("Car"))
            .Map<Bike>(m => m.Requires("Discriminator").HasValue("Bike"));
}

Ich habe den Typ meiner Diskriminatorspalte ohne offensichtliches Problem in VARCHAR (50) geändert, es funktioniert jetzt gut für mich. Die Alternative für mich wäre, auf ein anderes ORM zu migrieren, was einfach zu viel Arbeit ist, ich werde auf die nächsten Versionen des MySql-Anbieters warten und testen, ob sie das behoben haben, bis dahin bleibe ich bei dieser Lösung.