如何最好地从VB.Net中的关系数据库填充分层数据类?

时间:2014-09-02 11:03:33

标签: sql vb.net linq class

我在SQL Server 2008数据库中有一些关系数据,分为3个表,我想用它来填充代表它们的一些类。

层次结构是:产品 - >变体 - >选项。

我考虑过传回3个结果集并使用LINQ来检查相关表中是否有任何相关/子记录。我还考虑过传回一个包含三个表中所有数据并读取行的去规范化表,手动确定产品/变体/选项的开始和结束位置。在LINQ之前几乎没有任何经验,我选择了后者,这种方法很有效但需要很多行代码,我希望这些代码非常直接。

有没有更简单的方法来实现这个目标?

最终目标是将结果类序列化为JSON,以便在Web服务应用程序中使用。

我在Google上搜索并搜索了一个答案,但我想我并没有搜索到合适的关键字。

1 个答案:

答案 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。