Mysql
 sql >> Database >  >> RDS >> Mysql

Ereditarietà delle classi con .NET EF4.1 + MySQL

Oggi ho dovuto affrontare lo stesso problema, la differenza è che non mi affido a Code First per creare le tabelle per me, le creo manualmente mentre procedo.

Ho seguito la descrizione fornita qui e ho finito con il tuo stesso errore, ho creato manualmente un campo "Discriminatore" sulla mia tabella e ne ho cambiato il tipo in MEDIUMTEXT ma il provider ha insistito sul fatto che stavo fornendo in qualche modo una proprietà MaxLength, anche se MEDIUMTEXT non ha MaxLength come VARCHAR , presumo che si tratti di un bug del provider.

Bene, per ovviare a questo ho usato un'API fluente per dire manualmente il nome della colonna del discriminatore (che ho appena tenuto come "Discriminatore") e i valori che EF dovrebbe aspettarsi dalla colonna del discriminatore, nel tuo caso questo sarebbe:

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

Ho cambiato il tipo della mia colonna discriminatore in VARCHAR(50) senza alcun problema apparente, ora funziona bene per me. L'alternativa per me sarebbe migrare a un altro ORM che è semplicemente troppo faticoso, aspetterò le prossime versioni del provider MySql e verificherò se hanno risolto il problema, nel frattempo mi atterrò a questa soluzione.