Dapper sqlmapperextensions ajoute automatiquement "s" à nom_table?

c# dapper

Question

Ceci est ma première expérience avec Dapper.Contrib (dernière version de Nuget) et c'est une situation étrange:

using (SqlConnection cn = new SqlConnection(connectionString))
{
    cn.Open();
    var product = cn.Get<Product>(1);
}

Sur SqlMapperExtensions, il déclenche l'erreur Invalid object name 'Products' :

public static T Get<T>(this IDbConnection connection,
                       dynamic id, 
                       IDbTransaction transaction = null, 
                       int? commandTimeout = null) where T : class
{
    var type = typeof(T);
    string sql;
    if (!GetQueries.TryGetValue(type.TypeHandle, out sql))
}

La base de données reçoit la commande select * from Products where Id = @id est incorrect.

Pourquoi ajoute-t-il s à Product?

J'ai essayé avec d'autres tables et j'ai obtenu le même résultat.

Réponse acceptée

Il semble que ce soit écrit de cette façon, vous pouvez vérifier le code source

Ou plus précisément:

private static string GetTableName(Type type)
{
    //.... codes

    if (TableNameMapper != null)
    {
        name = TableNameMapper(type);
    }
    else
    {
        var tableAttr = //.... lookup attribute
        if (tableAttr != null)
            name = tableAttr.Name;
        else
        {
            name = type.Name + "s";
            if (type.IsInterface() && name.StartsWith("I"))
                    name = name.Substring(1);
        }
    }

Si vous souhaitez utiliser le nom du type littéral, vous pouvez facilement le configurer.

SqlMapperExtensions.TableNameMapper = (type) => {
    //use exact name
    return type.Name;
};

Réponse populaire

Il est conçu de cette façon. Vous pouvez remplacer le comportement par défaut en décorant vos classes Dapper.Contrib.Extensions.TableAttribute avec Dapper.Contrib.Extensions.TableAttribute .

using Dapper.Contrib.Extensions;

[Table("Product")]
public class Product
{
...
}


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