Dapper sqlmapperextensions автоматически добавляет "s" в tablename?



Это мой первый опыт работы с щеголь.Contrib (последняя версия от Nuget) и это странная ситуация:



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


На SqlMapperExtensions, он вызывает ошибку 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))
}


База данных получает команду select * from Products where Id = @id, которая неверна.



Почему он добавляет s к продукту?



Я пробовал с другими таблицами и получил тот же результат.

484   3  

3 ответов:

Похоже, что это написано таким образом, вы можете проверить исходный код

Или более конкретно:

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);
        }
    }

Если вы хотите использовать имя литерального типа, вы можете легко настроить его.

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

Оно определено таким образом. Вы можете переопределить поведение по умолчанию, украсив свои классы POCO Dapper.Contrib.Extensions.TableAttribute.

using Dapper.Contrib.Extensions;

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

Ваш ответ великолепен, хотя это не очень хорошая практика, чтобы иметь Dapper зависимость от сборки POCO Щеголь будет счастлив, если вы это сделаете использование системы.ComponentModel.DataAnnotations.Схема; вместо с помощью щеголя.ВНО.Расширения

Comments

    Ничего не найдено.