Dapper.Rainbow avec le schéma de base de données existant

c# dapper dapper-rainbow

Question

Je suis en train d'essayer Dapper. J'aime ce que j'ai vu jusqu'ici. Pour faire du CRUD simple, j'utilise Dapper.rainbow. Il fonctionne très bien. Cependant, cela ne fonctionne que si la table a une colonne d'identité avec le nom Id . Il est logique d'avoir db comme ça mais je ne peux pas demander le changement de nom de colonne dans la base de données pour utiliser Dapper. Pour être plus clair, je travaille avec une base de données comme Northwind Db. Il a répété le nom de la table dans la colonne Id partout.

Afin de gérer cela, j'ai changé le code Dapper.Rainbow comme suit:

   public T Get(TId id,string idColumnName="Id")
        {
            return database.Query<T>("select * from " + TableName + " where               "+idColumnName+" = @id", new { id }).FirstOrDefault();
        }

Existe-t-il un meilleur moyen de gérer cela, comme le mappage de colonnes / les annotations ou quelque chose de complètement différent?

J'ai lu des questions comme celles-ci

Mapper manuellement les noms de colonne avec les propriétés de classe

Dapper.Rainbow VS Dapper.Contrib

(Je suis tombé sur un petit problème similaire avec Dapper.Contrib, je le poserai séparément).

Mise à jour - Je ne sais pas si les réponses sont applicables à mon problème Dapper.Rainbow ici (au moins, je ne vois pas comment).

Merci d'avance pour votre aide!

Réponse acceptée

J'avais un problème similaire. Les extensions Dapper existantes ne correspondaient pas à mon modèle idéal. Je voulais des opérations CRUD simples avec des valeurs par défaut intelligentes sans rien de plus. Je voulais aussi avoir des modèles avec des propriétés supplémentaires qui ne correspondaient pas directement à la base de données. Par exemple - une propriété FullName qui combine FirstName et LastName dans son getter - et n'ajoute pas FullName aux instructions Insert et Update.

Je voulais que la colonne de clé primaire soit identifiée dans la plupart des cas, mais permette de remplacer un attribut.

Enfin, je voulais que le nom de la table corresponde au nom de la classe par défaut, mais permette de remplacer un attribut.

J'ai fini par écrire ma propre extension à Dapper pour résoudre ces problèmes. C'est sur Github et Nuget. J'espère que cela vous sera utile.

https://github.com/ericdc1/Dapper.SimpleCRUD




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