Dapper micro ORM, agnostic de base de données et type de guid MySql

c# dapper mysql orm sqlite

Question

J'expérimente Dapper sur un projet animalier. J'utilise SQLite pour exécuter tous les tests et MySQL pour "production". Cependant, je ne sais pas comment utiliser au mieux Dapper pour gérer la situation agnostique des bases de données.

Le problème particulier que je rencontre est avec MySql qui ne supporte pas le type Guid pour la clé primaire, donc j'utilise varchar (40) comme type (SQLite supporte l'identifiant unique qui est un guid). Donc, voici le problème si j'ai un référentiel générique, comme ci-dessous, j'aurais des problèmes lors de la sélection de la base de données MySql. Parce que le type de propriété Id est que Guid et Dapper lancent " Erreur d'analyse de la colonne 10 " car le type varchar ne correspond pas au type guid.

Si je change la propriété Id de guid en int alors le sql brut dans GetById serait encore plus difficile que je ne sais pas comment écrire. Ce sera quelque chose comme: 1. Commencer la transaction, 2. Insérer, 3. Sélectionner le dernier identifiant inséré et le retourner. Alors vais-je aller avec si le type de base de données est mysql, alors utilisez last_insert_id , ou s'il s'agit de sqlite alors utilisez last_insert_rowid ? Parce que la syntaxe sql brute serait assez différente d'une base de données à une autre ...

public IEnumerable<T> GetById(Guid id) //convention: Id is always of type Guid.
{
  return UnitOfWork.DbConnection.Query<T>(
      string.Format(
        "select * from {0} where Id = @Id", typeof (T).Name), new {Id = id});
}

D'autres exemples seraient de limiter le nombre de lignes renvoyées (en particulier pour la pagination), etc. Alors, comment vais-je écrire des requêtes SQL agnostiques de base de données avec dapper? Et peut-être que dans ma situation Dapper ne convient pas? Peut-être devrais-je utiliser le même vieux NHibernate ici. Aucune suggestion? Est-ce que je le fais mal? Merci!

Réponse populaire

Essayez d'utiliser CHAR (36) comme type de données pour la clé primaire dans MySQL, cela sera transféré à Guid par le connecteur MySQl - J'utilise le connecteur MySQL version 6.3.4. Fonctionne également avec Dapper.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi