다음 클래스 구조와 일치하는 데이터베이스 구조가 있습니다. 요소 목록이 포함 된 디자인 클래스가 있습니다. 텍스트, 모양 및 이미지라는 세 가지 유형의 요소가있을 수 있습니다. 나는 추상 클래스를 사용하여 셰이프와 데이터베이스 구조 사이의 공통 속성을 유지합니다.Dapper - 테이블 상속을 사용하는 다중 결과 집합 매핑
내 저장 프로 시저는 디자인이있는 레코드 세트와 모든 요소가있는 레코드 세트를 반환합니다. 요소 레코드 집합은 왼쪽 조인을 사용하여 비표준 속성과 함께 모든 요소를 반환합니다. 각 요소에는 요소의 유형을 결정하는 ElementTyepID가 있습니다. 디자인 클래스에 List가 포함되어 있습니다. 두 번째 결과 집합을 가져 와서 ElementTypeID를 기반으로 Element의 올바른 하위 클래스에 매핑하는 방법이 있습니까?
public class Design
{
public int DesignID {get;set;}
public string DesignName {get;set;}
public List<Element> ElementList {get;set;}
}
public class Element
{
public int ElementID {get;set;}
public int DesignID {get;set;}
public int ElementTypeID {get;set;}
public int Width {get;set;}
public int Height {get;set;}
public string Color {get;set;}
}
public class ElementText
{
public int ElementTextID {get;set;}
public int ElementID {get;set;}
public string Font {get;set;}
public string TextValue {get;set;}
}
public class ElementShape
{
public int ElementShapeID {get;set;}
public int ElementID {get;set;}
public int ShapeType {get;set;}
}
public class ElementImage
{
public int ElementImageID int {get;set;}
public int ElementID {get;set;}
public string ImageURL {get;set;}
}
Table: Design
-------------
DesignID int
DesignName varchar(50)
Table: Element
--------------
ElementID int
DesignID int
ElementTypeID int 0-Text, 1-Shape, 2-Image
Width int
Height int
Color varchar(10)
Table: ElementText
------------------
ElementTextID int
ElementID int
Font varchar(50)
TextValue varchar(50)
Table: ElementShape
-------------------
ElementShapeID int
ElementID int
ShapeType int
Table: ElementImage
-------------------
ElementImageID int
ElementID int
ImageURL varchar(255)
Create Table #Designs
(
[DesignID] [int] NOT NULL,
[DesignName] [varchar](50) NOT NULL,
)
-- Place all designs into a temp table
Insert Into #Designs
Select DesignID, DesignName from Design
-- Return 1st Result Set (Designs)
select * from #Designs
-- Return 2nd Result Set (Elements)
select * from Element as e
left Join ElementText as t on e.ElementID=t.ElementID
left Join ElementShape as s on e.ElementID=s.ElementID
left Join ElementImage as c on e.ElementID=c.ElementID
Where e.DesignID in (Select DesignID from #Designs)
Order By e.ElementID ASC