2013-02-14 1 views
0

내 클래스를 매핑 할 유창함 automapper을 사용하고 있는데 나는 현재 사람에 대한 요약 정보를 포함하는 기본 클래스와 자신의 모든 정보가 포함 된 파생 클래스가 : 내가 아는저장 유창함/NHibernate에 예측

interface IPersonSummary 
{ 
    string Name { get; set; } 
    DateTime? DOB { get; set; } 
} 

interface IPerson : IPersonSummary 
{ 
    string Address { get; set; } 
    string HairColor { get; set; } 
} 

public class PersonSummary : IPersonSummary 
{ 
    public string Name { get; set; } 
    public DateTime? DOB { get; set; } 
} 

public class Person : PersonSummary, IPerson 
{ 
    public string Address { get; set; } 
    public string HairColor { get; set; } 
} 

을 PersonSummary를 채우기 위해 필요한 필드들만을 데이터베이스로부터로드하기 위해 프로젝션을 사용할 수는 있지만, 그것은 각 필드를 맵핑하도록 명시 적으로 선언해야하며, 자동 정렬을 사용하는 모든 지점을 처음부터 무력화해야합니다. 또한 추가 필드 (예 : Address 및 HairColor)가 기본값으로 설정되어 프로젝션을 사용하여 데이터베이스에 새 항목을 만드는 방법을 찾을 수 없었습니다. 필자는 동일한 테이블을 사용하기 위해 Person과 PersonSummary를 모두 설정하도록 재정의를 시도했지만 예상대로 Fluent는 그것에 대해 불평했습니다.

이러한 클래스를 동일한 테이블에 매핑하는 방법은 무엇입니까?

판별 자 컬럼을

업데이트를 사용 AutomappingConfiguration의 계층 구조 상속 매핑 당

답변

0

사용 테이블 : 자동 매핑에서 제외하고 아래의 classmaps를 사용하거나 답변

class SharedMap<T> : ClassMap<T> where T : IPersonSummary 
{ 
    public SharedMap() 
    { 
     Id(x => x.Id); 
     Map(x => x.Name); 
     Map(x => x.DOB); 
    } 
} 

class PersonSummaryMap : SharedMap<PersonSummary> 
{ 
    public PersonSummaryMap() 
    { 
     SchemaAction.None(); 
    } 
} 

class PersonMap : SharedMap<Person> 
{ 
    public PersonMap() 
    { 
     Map(x => x.Address).Default("nowhere"); 
     Map(x => x.HairColor).Default("black"); 
    } 
} 
+0

감사를 자동 매핑으로 아이디어를 포함하지만, 나는 당신을 정확하게 이해하지 못한다면 discriminator 란이 여기의 해결책이라고 생각하지 않습니다. 판별 자 열을 사용하면 동일한 "테이블"에 다른 "유형"을 저장할 수 있습니다. 필자의 경우 "PersonSummary"레코드를 저장하고 모든 초과 필드 (예 : Address 및 HairColor)를 기본값으로 설정할 수 있기를 원합니다. 그런 다음 그 레코드를 Person 또는 PersonSummary로로드 할 수 있기를 원합니다. 투영은 내가 원하는대로 로딩 부분을 정확히 처리합니다. 작업을하기 위해 노력하고있는 저축 부분입니다. –