Dapper.Net 및 Dapper.Net 확장에 대해 "NotMapped"와 동일한 기능이 있습니까?

dapper micro-orm

문제

나는 Dapper.Net으로 게임을 시작했고, 지금까지 정말 좋아했습니다. 그러나 저는 한 가지 문제를 겪었습니다.

다음과 같은 POCO 클래스가 있다고 가정 해 보겠습니다.

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string FullName { get { return FirstName + " " + LastName; } }
}

이제 Dapper.Net과 Dapper.Net 확장을 사용하여 다음과 같이 DB에서 해당 데이터 유형의 모든 인스턴스를로드하기 만하면됩니다.

string connectionString = CloudConfigurationManager.GetSetting("DBConnection");
using (SqlConnection cn = new SqlConnection(connectionString))
{
    cn.Open();

    IEnumerable<Types.Person> entities = cn.GetList<Types.Person>();
    var forceMe = entities.ToList();
}

Linq 설치 잘 작동하지만 평가를 강제로 .ToList () 함께 줄 안타 때 FullName "잘못된 열 이름"위로 불면. NotMapped에 대한 Entity Framework DataAnnotations 항목을 존중할 수 있다고 생각하여 NotMapped 특성을 추가하려고했습니다 (프로젝트에 EF 5를 추가 한 후). 이것은 작동하지 않았다.

그래서, 문제는 Dapper.Net에게 DB로부터 컬럼이 예상되지 않는다고 어떻게 말합니까? 이 문제는 확장 기능에 문제가 있습니까? POCO 모델에서 볼 수있는 모든 것을 DB 열에 매핑하려고합니까? SQL 작성으로 되돌아 가야하고 명시 적으로 원하는 컬럼을 요청해야합니까, 아니면 컬럼에서 NotMapped와 동등한 컬럼을 얻을 수있는 방법이 있습니까?

미리 감사드립니다.

-아담

수락 된 답변

맵핑되는 특정 속성을 무시하는 유일한 방법은 사용자 정의 필드 매핑을 지정할 수있는 자동 클래스 매퍼 를 구현하는 것입니다. 예 :

public class CustomMapper : ClassMapper<Foo>
{
    public CustomMapper()
    {
        Table("FooTable");
        Map(f => f.Id).Column("FooId").Key(KeyType.Identity);
        Map(f => f.DateOfBirth).Column("BirthDate");
        Map(f => f.FirstName).Column("First");
        Map(f => f.LastName).Column("Last");
        Map(f => f.FullName).Ignore();
        Map(f => f.Calculated).ReadOnly();
    }
}

public class Foo
{
    public int Id { get; set; }
    public DateTime DateOfBirth { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string FullName
    {
        get { return string.Format("{0} {1}", FirstName, LastName); }
    }
}

위의 예에서 FullName은 무시됩니다.

auto-mapper는 POCO 클래스 이름이 테이블 이름과 일치하지 않을 경우 테이블 이름을 조정할 수도 있습니다.

또한 POCO 클래스와 동일한 어셈블리에 사용자 지정 맵을 유지해야한다는 점도 기억하십시오. 라이브러리는 리플렉션을 사용하여 사용자 정의 맵을 찾고 하나의 어셈블리 만 스캔합니다.

희망이 도움이 행운을 빕니다



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