gpt4 book ai didi

inheritance - Dapper - 映射使用表继承的多个结果集

转载 作者:行者123 更新时间:2023-12-02 01:57:22 25 4
gpt4 key购买 nike

我尝试映射以下类结构和匹配的数据库结构。我有一个包含元素列表的设计类。可以有 3 种不同类型的元素:文本、形状和图像。我使用一个抽象类来维护形状和我的数据库结构之间的共同属性。

我的存储过程返回两个记录集,一个包含设计,另一个包含所有元素。元素记录集使用左连接返回所有元素及其非公共(public)属性。每个元素都有一个 ElementTypeID,用于确定它是什么类型的元素。我的设计类包含一个列表。有没有办法获取第二个结果集并根据 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

最佳答案

这种联合方法不是 dapper 直接支持的方法。你可能对 Query<…> 有好感接受多个通用类型参数的 api - 每个水平分割一个 - 并使用最终选择器来构建正确的对象。或者,您可以使用非通用 API 并手动拉出列(尽管如果列名重复,您可能会遇到问题)。

但对于自动化的东西 - 需要考虑、设计、指定、实现、测试和支持该功能。对于这种情况,这些事情还没有发生。

关于inheritance - Dapper - 映射使用表继承的多个结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19204399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com