더 까다로운 프로 시저 및 저장 프로 시저

c# dapper

문제

두 가지 문제가 있습니다. 두 가지 모두이 질문에서 대답 할 수 있기를 바랍니다. 나는 이런 모델을 가지고있다 :

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
}

이제 내 저장 프로 시저 (변경할 수 없음)가 first_name, lastName 및 UserEmail을 반환한다고 가정합니다. 필드를 속성에 매핑하는 몇 가지 방법 (데이터 주석을 사용하기를 바랍니다)을 사용하고 싶습니다. 이 같은:

public class Person
{
    [Column(Name = "first_name")]
    public string FirstName { get; set; }
    [Column(Name = "lastName")]
    public string LastName { get; set; }
    [Column(Name = "UserEmail")]
    public string Email { get; set; }
}

이것이 가능한가? 대소 문자를 구분하지 않으므로 등록 정보가 필드 이름과 일치하는지 확인하도록 제안 할 수 있습니다. 따라서 UserEmail 로의 전자 메일 변경은 가능하지만 이러한 이유로는 아닙니다. 나는이 사람이 할당 한 클래스가 :

public class Example
{
    public string Name { get; set; }
    public Person Mother { get; set; }
    public Person Father { get; set; }
}

또한 사용할 수 없습니다.

Dapper.DefaultTypeMap.MatchNamesWithUnderscores = true; 

그 때 다른 모든 속성을 무시하는 것 같습니다. 어떤 도움이라도 평소처럼 크게 평가 될 것입니다 :)

인기 답변

체인으로 할 수 있습니다.

static Tortuga.Chain.SqlServerDataSource DS = new Tortuga.Chain.SqlServerDataSource (connectionString);

var people = DS.Procedure("procName", new { @Param1 =  x, @Parm2 = y}).ToCollection<Person>().Execute();

기본적으로 Column 속성을 사용합니다.


두 번째 예제는 더 어렵습니다. 어떤 FirstName이 어떤 속성과 함께 사용되는지 알 수 있도록 접두어가 필요합니다.

public class Example
{
    public string Name { get; set; }
    [Decompose("Mother_")]
    public Person Mother { get; set; }
    [Decompose("Father_")]
    public Person Father { get; set; }
}

SELECT x.nName, m.FirstName as Mother_FirstName, f.FirstName as Father_FirstName, [...] 
FROM people x
LEFT JOIN people f ON x.FatherKey = f.Key
LEFT JOIN people m ON x.MotherKey = m.Key


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.