Dapper sqlmapperextensions가 tablename에 "s"를 자동으로 추가합니까?

c# dapper

문제

이것은 Dapper.Contrib ( Nuget의 최신 버전)을 처음 접한 경험이며 이상한 상황입니다.

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

SqlMapperExtensions에서 Invalid object name 'Products' : 오류가 발생 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 명령을받습니다. select * from Products where Id = @id 는 잘못되었습니다.

왜 추가 않습니다 s 제품에?

다른 테이블을 사용해 보았는데 같은 결과를 얻었습니다.

수락 된 답변

이 방법으로 작성된 것 같습니다. 소스 코드를 확인할 수 있습니다.

또는 구체적으로 :

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

인기 답변

그것은 이런 식으로 desgined입니다. POCO 클래스Dapper.Contrib.Extensions.TableAttributeDapper.Contrib.Extensions.TableAttribute 면 기본 동작을 재정의 할 수 있습니다.

using Dapper.Contrib.Extensions;

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


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow