가 나는 다음과 같은 클래스가 개별 테이블에 매핑 :단정 확장 : 복합 필드 클래스,
public class Publication
{
public int Id { get; set; }
public string Title { get; set; }
public string Headline { get; set; }
public DateTime Published { get; set; }
public ProductContact Contact { get; set; }
}
public class ProductContact
{
public string FullName { get; set; }
public string JobTitle { get; set; }
public string Email { get; set; }
}
그리고이 구조와 관련된 테이블, "출판물"모든 필드가은 (의 속성을 포함 ProductContact). 나는이 프로그램이 예외 발생 (포함 ProductContact 정보)를 발행 행을 삽입하려고하면
: 그래서
System.NotSupportedException: The member Contact of type ProductContact cannot be used as a parameter value
을, 나는 속성 테이블의 필드에 ProductContact 속성을 매핑 할 매퍼 추가 :
public PublicationMapper()
{
TableName = "Publications";
Map(x => x.Contact.FullName).Column("ContactFullName");
Map(x => x.Contact.JobTitle).Column("ContactJobTitle");
Map(x => x.Contact.Email).Column("ContactEmail");
AutoMap();
}
이 매퍼를 사용하면 동일한 예외가 발생합니다.
System.Data.SqlClient.SqlException (0x80131904): Must declare the scalar variable "@FullName".
:
그런 다음, 나는이 경우 삽입 문
Map(x => x.Contact).Ignore();
에서이 요소를 포함하지 않도록 말끔에게, 연락처 필드에 문을 무시 추가, 나는 다른 예외를 얻을
Dapper가이 속성을 완전히 무시하고 이전 단계에서 추가 한 매핑이 효과가 없음을 나타냅니다.
ProductContact 속성을 테이블 필드에 매핑하는 방법이 있습니까?
감사합니다.
왜 익명의 클래스가 아닌'new {pub.Id, pub.Title, ......, ContactFullName = pub.Contact.FullName, ContactJobTitle = pub.Contact.JobTitle, ContactEmail = pub.Contact.Email }'? 'ContactFullName'이 실제로는 SQL의 매개 변수 이름과 일치시키기 위해 실제로는'FullName'이어야합니다. SQL과 완전한 Dapper 호출을 보여 주면 도움이 될 것입니다. – juharr
그럴 수 없다는 것은 유감 스럽다. Dapper가 코드와 사용 편의성을 줄이는 데 도움이되는 방법임을 관리자에게 보여 주려고 정확한 위치에 자리 잡았습니다. 특히 개체와 해당 데이터의 이름이 다른 경우 아 잘 – zerohero