sql >> Database >  >> RDS >> Mysql

Overerving van klassen met .NET EF4.1 + MySQL

Ik werd vandaag met hetzelfde probleem geconfronteerd, het verschil is dat ik niet op Code First vertrouw om de tabellen voor mij te maken, ik maak ze gaandeweg handmatig aan.

Ik heb de beschrijving gevolgd die gegeven wordt hier en ik kreeg dezelfde fout als jij, ik heb handmatig een "Discriminator" -veld op mijn tafel gemaakt en het type gewijzigd in MEDIUMTEXT, maar de provider stond erop dat ik op de een of andere manier een MaxLength-eigenschap opleverde, hoewel MEDIUMTEXT geen MaxLength heeft zoals VARCHAR , ik neem aan dat dit een bug van de provider moet zijn.

Om dit te omzeilen heb ik een vloeiende API gebruikt om handmatig de naam van de discriminatorkolom te vertellen (die ik net als "Discriminator" heb bewaard) en waarden die EF mag verwachten van de discriminatorkolom, in jouw geval zou dit zijn:

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"));
}

Ik heb het type van mijn discriminatorkolom veranderd in VARCHAR(50) zonder duidelijk probleem, het werkt nu goed voor mij. Het alternatief voor mij zou zijn om te migreren naar een andere ORM wat gewoon te veel werk is, ik wacht op de volgende versies van de MySql-provider en test of ze dit hebben opgelost, ondertussen blijf ik bij deze oplossing.




  1. Bestel een MySQL-tabel met twee kolommen

  2. SQL TRUNCATE-syntaxis - weergegeven door DBMS

  3. MySQL REGEXP woordgrenzen [[:<:]] [[:>:]] en dubbele aanhalingstekens

  4. PL/pgSQL anoniem codeblok