我在SQL Server 2008数据库中有一些关系数据,分为3个表,我想用它来填充代表它们的一些类。
层次结构是:产品 - >变体 - >选项。
我考虑过传回3个结果集并使用LINQ来检查相关表中是否有任何相关/子记录。我还考虑过传回一个包含三个表中所有数据并读取行的去规范化表,手动确定产品/变体/选项的开始和结束位置。在LINQ之前几乎没有任何经验,我选择了后者,这种方法很有效但需要很多行代码,我希望这些代码非常直接。
有没有更简单的方法来实现这个目标?
最终目标是将结果类序列化为JSON,以便在Web服务应用程序中使用。
我在Google上搜索并搜索了一个答案,但我想我并没有搜索到合适的关键字。
答案 0 :(得分:0)
经过一段时间的游戏,我找到了实现这个目标的方法......
首先,在SQL Server中创建一个将数据作为XML返回的存储过程。生成包含分层数据的XML文档相对容易。
CREATE PROCEDURE usp_test
AS
BEGIN
SELECT
1 AS ProductID
, 'Test' AS ProductDesc
, (
SELECT 1 AS VariantID
'Test'AS VariantDesc
FOR XML PATH('ProductVariant'), ROOT('ProductVariants'), TYPE
)
FOR XML PATH('Product'), ROOT('ArrayOfProduct'), TYPE
END
这为您提供了一个具有父子关系的XML文档:
<ArrayOfProduct>
<Product>
<ProductID>1</ProductID>
<ProductDesc>Test</ProductDesc>
<ProductVariants>
<ProductVariant>
<VariantID>1</VariantID>
<VariantDesc>Test</VariantDesc>
</ProductVariant>
</ProductVariants>
</Product>
</ArrayOfProduct>
接下来,使用SqlDataReader将结果读入VB.Net应用程序。声明一个空对象来保存数据,并使用XmlSerializer将XML反序列化为对象。
此时,曾经在SQL表中的数据现在表示为VB.Net应用程序中的类。
然后,您可以使用JavaScriptSerializer.Serialize将对象序列化为JSON。