Dapper sqlmapperextensions agrega automáticamente "s" a tablename?

c# dapper

Pregunta

Esta es mi primera experiencia con Dapper.Contrib (la última versión de Nuget) y es una situación extraña:

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

En SqlMapperExtensions, genera el error 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 datos recibe el comando select * from Products where Id = @id que es incorrecto.

¿Por qué se anexe s al producto?

Lo he intentado con otras tablas y obtengo el mismo resultado.

Respuesta aceptada

Parece que está escrito de esta manera, puedes verificar el código fuente

O más específicamente:

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 desea usar el nombre de tipo literal, puede configurarlo fácilmente.

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

Respuesta popular

Está diseñado de esta manera. Puede anular el comportamiento predeterminado decorando sus clases POCO con Dapper.Contrib.Extensions.TableAttribute .

using Dapper.Contrib.Extensions;

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


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué