sql >> Databáze >  >> RDS >> Mysql

Dědičnost tříd s .NET EF4.1 + MySQL

Dnes jsem se potýkal se stejným problémem, rozdíl je v tom, že se nespoléhám na Code First, že za mě vytvoří tabulky, ale vytvářím je ručně za pochodu.

Postupoval jsem podle uvedeného popisu zde a skončil jsem na stejné chybě jako vy, ručně jsem na svém stole vytvořil pole „Discriminator“ a změnil jeho typ na MEDIUMTEXT, ale poskytovatel trval na tom, že nějak poskytuji vlastnost MaxLength, i když MEDIUMTEXT nemá žádnou MaxLength jako VARCHAR Předpokládám, že to musí být chyba poskytovatele.

Abych to vyřešil, použil jsem plynulé API k ručnímu sdělení názvu sloupce diskriminátoru (který jsem si ponechal jako „Discriminator“) a hodnot, které by měl EF očekávat od sloupce diskriminátor, ve vašem případě by to bylo:

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

Změnil jsem typ svého diskriminačního sloupce na VARCHAR(50) bez zjevného problému, nyní mi to funguje dobře. Alternativou pro mě by byla migrace na jiný ORM, což je prostě moc práce, počkám na další verze poskytovatele MySql a otestuji, zda to opravili, zatím se budu držet tohoto řešení.




  1. Jak provést bodovou obnovu dat MySQL a MariaDB pomocí ClusterControl

  2. Vytvoření systému slevových kódů (MySQL/php)

  3. Může uložená procedura/funkce vrátit tabulku?

  4. Výsledek doby dotazu v MySQL s PHP