入れ子になっているスキーマ要素間の暗黙的なリレーションの割り当て (ADO.NET)
XML スキーマ言語定義 (XSD) スキーマでは、複数の複合型を入れ子にして指定できます。 この場合、割り当て処理には既定の割り当てが適用されます。その際、DataSet に作成される内容を次に示します。
複合型 (親および子) それぞれに対して 1 つのテーブル。
親に UNIQUE 制約がなく、親テーブル名が TableName である場合は、TableName_Id という名前の主キー列が、テーブル定義ごとに 1 つ追加されます。
親テーブルの主キー制約により、追加された列が主キーとして認識されます (IsPrimaryKey プロパティを True に設定することで)。 制約には、Constraint# (# は、1、2、3 など) という名前が付けられます。 たとえば、最初の制約の既定の名前は Constraint1 となります。
子テーブルの外部キー制約により、追加された列が親テーブルの主キーを参照する外部キーとして認識されます。 親テーブル名が ParentTable、子テーブル名が ChildTable の場合には、制約の名前は ParentTable_ChildTable となります。
その結果、親テーブルと子テーブル間のデータが関連付けられます。
OrderDetail が Order 要素の子要素であることを示すスキーマの例を次に示します。
<xs:schema id="MyDataSet"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="MyDataSet" msdata:IsDataSet="true">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="Order">
<xs:complexType>
<xs:sequence>
<xs:element name="OrderNumber" type="xs:string" />
<xs:element name="EmpNumber" type="xs:string" />
<xs:element name="OrderDetail">
<xs:complexType>
<xs:sequence>
<xs:element name="OrderNo" type="xs:string" />
<xs:element name="ItemNo" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
XML スキーマの割り当て処理によって DataSet に作成される内容は、次のとおりです。
Order および OrderDetail テーブル。
Order(OrderNumber, EmpNumber, Order_Id) OrderDetail(OrderNo, ItemNo, Order_Id)
Order テーブルの UNIQUE 制約。 IsPrimaryKey プロパティは True に設定されるので注意してください。
ConstraintName: Constraint1 Type: UniqueConstraint Table: Order Columns: Order_Id IsPrimaryKey: True
OrderDetail テーブルの外部キー制約。
ConstraintName: Order_OrderDetail Type: ForeignKeyConstraint Table: OrderDetail Columns: Order_Id RelatedTable: Order RelatedColumns: Order_Id
Order テーブルと OrderDetail テーブル間のリレーションシップ。 スキーマの Order 要素と OrderDetail 要素が入れ子になっているため、このリレーションシップの Nested プロパティは True に設定されます。
ParentTable: Order ParentColumns: Order_Id ChildTable: OrderDetail ChildColumns: Order_Id ParentKeyConstraint: Constraint1 ChildKeyConstraint: Order_OrderDetail RelationName: Order_OrderDetail Nested: True
参照
概念
XML スキーマ (XSD) からの DataSet リレーションの生成