MySQL in FunkyORM

06/13/2026
MySQL in FunkyORM

FunkyORM speaks MySQL through MySqlConnector, MIT licensed, not Oracle’s GPL MySql.Data. That driver choice lives in FunkyORM, the .NET micro-ORM that maps plain C# classes to SQL Server, PostgreSQL, MySQL, and SQLite. Version 3.6.0 is when that MIT driver landed in Funcular.Data.Orm, still without a second package.

Introducing Funcular ORM shows how a C# class becomes a row; clone or browse Funcular.FunkyOrm if you want the MySQL provider next to the others.

The driver and the license

Restore already builds a tree of licenses — the dependency graph — and a second license in the graph, Oracle’s GPL beside MIT, was the cost of MySql.Data. MySqlConnector is MIT, so one package stays one MIT stack, and restore does not drag Oracle’s GPL into the graph beside it.

Inserts and the new id

MySQL has no RETURNING (the insert can give you the new row back in the same round trip on engines that have it). Inserts read AUTO_INCREMENT (MySQL’s integer that assigns the next identity) through LastInsertedId. If you are coming from PostgreSQL or SQL Server, that is the mapping to remember: the identity comes back on a follow-up read of LastInsertedId, and the insert SQL does not look like theirs.

Identifiers, databases, and string compares

String + in a lambda becomes CONCAT in the SQL MySQL receives, so a C# concatenation in a predicate is still one function call on the server, not a + operator MySQL does not apply to strings that way. Identifiers use backticks, and [Table(Schema=)] is a database in MySQL, not a schema in the SQL Server sense, so you name it like a catalog, not like a namespace.

Default collations (the rules the engine uses to compare strings, including whether case counts) are often *_ci, so string compares are case-insensitive unless you change that. That is the engine’s default, not a FunkyORM rewrite of your predicate.

MySQL support shipped in Funcular.Data.Orm 3.6.0; before you treat Foo@x and foo@x colliding as a library bug, look at the column’s collation, and read the engine notes on the 3.6.0 tag.