为Oracle表生成C#代码

时间:2009-07-10 12:47:21

标签: c# xml xslt code-generation

我有这个XML用于Oracle中的表结构(PL / SQL开发人员中的导出选项)。如何在C#中为get实体类生成代码?

<?xml version="1.0" encoding="utf-8"?>
<ROWDATA>
  <ROW>
    <Name>ID_TRANSACCION</Name>
    <Type>NUMBER(12)</Type>
    <Nullable></Nullable>
    <Default></Default>
    <Comments>Identificador unico de la transacci&#243;n.</Comments>
  </ROW>
  <ROW>
    <Name>ID_RECIBO</Name>
    <Type>NUMBER(12)</Type>
    <Nullable></Nullable>
    <Default></Default>
    <Comments>Identificador unico del recibo.</Comments>
  </ROW>
  <ROW>
    <Name>IMPORTE_COBRAR</Name>
    <Type>NUMBER(10,2)</Type>
    <Nullable>Y</Nullable>
    <Default></Default>
    <Comments>Importe a cobrar</Comments>
  </ROW>
</ROWDATA>

谢谢!

1 个答案:

答案 0 :(得分:0)

查看xsd.exe - 此工具允许您从示例xml文档(导出表单Oracle)创建xsd架构,并从给定的xsd架构创建.net类。

现在您的示例代码可见,很明显您需要先转换xml,然后才能将其与xsd.exe结合使用。

如果您正在寻找 .NET EntityFramework 的oracle支持,则需要使用特定的 Oracle提供商。一个例子是DataDirect


示例xslt用于架构生成

<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsl:output method="xml" omit-xml-declaration="no" indent="yes"/>

    <xsl:template match="/">
        <xsl:element name="xsd:schema">
            <xsl:attribute name="attributeFormDefault">
                qualified
            </xsl:attribute>
            <xsl:attribute name="elementFormDefault">
                qualified
            </xsl:attribute>
            <xsl:apply-templates />
        </xsl:element>
    </xsl:template>

    <xsl:template match="ROWDATA">
        <xsl:element name="xsd:element">
            <xsl:attribute name="name">
                <xsl:value-of select="local-name()"/>
            </xsl:attribute>
            <xsl:element name="xsd:complexType">
                <xsl:element name="xsd:sequence">
                    <xsl:apply-templates />
                </xsl:element>
            </xsl:element>
        </xsl:element>
    </xsl:template>

    <xsl:template match="ROW">
        <xsl:element name="xsd:element">
            <xsl:attribute name="name">
                <xsl:value-of select="./Name"/>
            </xsl:attribute>
            <xsl:attribute name="nillable">
                <xsl:value-of select="contains(./Nullable, 'Y')"/>
            </xsl:attribute>
            <xsl:if test="./Default != ''">
                <xsl:attribute name="default">
                    <xsl:value-of select="./Default"/>
                </xsl:attribute>
            </xsl:if>
            <xsl:element name="xsd:annotation">
                <xsl:element name="xsd:documentation">
                    <xsl:value-of select="./Comments"/>
                </xsl:element>
            </xsl:element>
            <xsl:element name="xsd:simpleType">
                <xsl:element name="xsd:restriction">
                    <xsl:attribute name="base">xsd:decimal</xsl:attribute>
                    <!-- elaborate data type here -->
                </xsl:element>
            </xsl:element>
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

生成的架构文档可用作xsd.exe的输入。