LINQ to SQL では 、外部マッピングがサポートされています。これは、データベースのデータ モデルとオブジェクト モデル間のマッピングを指定するために別の XML ファイルを使用するプロセスです。 外部マッピング ファイルを使用する利点は次のとおりです。
マッピング コードをアプリケーション コードから除外することができます。 この方法により、アプリケーション コードの煩雑さが軽減されます。
外部マッピング ファイルは、構成ファイルのように扱うことができます。 たとえば、外部マッピング ファイルをスワップアウトするだけで、バイナリを配布した後のアプリケーションの動作を更新できます。
要求事項
マッピング ファイルは XML ファイルである必要があり、ファイルは LINQ to SQL スキーマ定義 (.xsd) ファイルに対して検証する必要があります。
次の規則が適用されます。
マッピング ファイルは XML ファイルである必要があります。
XML マッピング ファイルは、XML スキーマ定義ファイルに対して有効である必要があります。 詳細については、「 方法: DBML ファイルと外部マッピング ファイルを検証する」を参照してください。
外部マッピングは、属性ベースのマッピングをオーバーライドします。 つまり、外部マッピング ソースを使用して DataContextを作成すると、 DataContext はクラスで作成したすべてのマッピング属性を無視します。 この動作は、クラスが外部マッピング ファイルに含まれているかどうかに当てはまります。
LINQ to SQL では、2 つのマッピング アプローチ (属性ベースと外部) のハイブリッド使用はサポートされていません。
XML スキーマ定義ファイル
LINQ to SQL の外部マッピングは、次の XML スキーマ定義に対して有効である必要があります。
このスキーマ定義ファイルを、DBML ファイルの検証に使用されるスキーマ定義ファイルと区別します。 詳細については、「 LINQ to SQL でのコード生成」を参照してください)。
注
Visual Studio ユーザーは、[XML スキーマ] ダイアログ ボックスでこの XSD ファイルを "LinqToSqlMapping.xsd" と見つけます。 このファイルを外部マッピング ファイルの検証に正しく使用するには、「 方法: DBML ファイルと外部マッピング ファイルを検証する」を参照してください。
<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://schemas.microsoft.com/linqtosql/mapping/2007" xmlns="http://schemas.microsoft.com/linqtosql/mapping/2007"
elementFormDefault="qualified" >
<xs:element name="Database" type="Database" />
<xs:complexType name="Database">
<xs:sequence>
<xs:element name="Table" type="Table" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="Function" type="Function" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="Name" type="xs:string" use="optional" />
<xs:attribute name="Provider" type="xs:string" use="optional" />
</xs:complexType>
<xs:complexType name="Table">
<xs:sequence>
<xs:element name="Type" type="Type" minOccurs="1" maxOccurs="1" />
</xs:sequence>
<xs:attribute name="Name" type="xs:string" use="optional" />
<xs:attribute name="Member" type="xs:string" use="optional" />
</xs:complexType>
<xs:complexType name="Type">
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Column" type="Column" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="Association" type="Association" minOccurs="0" maxOccurs="unbounded" />
</xs:choice>
<xs:element name="Type" type="Type" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="Name" type="xs:string" use="required" />
<xs:attribute name="InheritanceCode" type="xs:string" use="optional" />
<xs:attribute name="IsInheritanceDefault" type="xs:boolean" use="optional" />
</xs:complexType>
<xs:complexType name="Column">
<xs:attribute name="Name" type="xs:string" use="optional" />
<xs:attribute name="Member" type="xs:string" use="required" />
<xs:attribute name="Storage" type="xs:string" use="optional" />
<xs:attribute name="DbType" type="xs:string" use="optional" />
<xs:attribute name="IsPrimaryKey" type="xs:boolean" use="optional" />
<xs:attribute name="IsDbGenerated" type="xs:boolean" use="optional" />
<xs:attribute name="CanBeNull" type="xs:boolean" use="optional" />
<xs:attribute name="UpdateCheck" type="UpdateCheck" use="optional" />
<xs:attribute name="IsDiscriminator" type="xs:boolean" use="optional" />
<xs:attribute name="Expression" type="xs:string" use="optional" />
<xs:attribute name="IsVersion" type="xs:boolean" use="optional" />
<xs:attribute name="AutoSync" type="AutoSync" use="optional" />
</xs:complexType>
<xs:complexType name="Association">
<xs:attribute name="Name" type="xs:string" use="optional" />
<xs:attribute name="Member" type="xs:string" use="required" />
<xs:attribute name="Storage" type="xs:string" use="optional" />
<xs:attribute name="ThisKey" type="xs:string" use="optional" />
<xs:attribute name="OtherKey" type="xs:string" use="optional" />
<xs:attribute name="IsForeignKey" type="xs:boolean" use="optional" />
<xs:attribute name="IsUnique" type="xs:boolean" use="optional" />
<xs:attribute name="DeleteRule" type="xs:string" use="optional" />
<xs:attribute name="DeleteOnNull" type="xs:boolean" use="optional" />
</xs:complexType>
<xs:complexType name="Function">
<xs:sequence>
<xs:element name="Parameter" type="Parameter" minOccurs="0" maxOccurs="unbounded" />
<xs:choice>
<xs:element name="ElementType" type="Type" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="Return" type="Return" minOccurs="0" maxOccurs="1" />
</xs:choice>
</xs:sequence>
<xs:attribute name="Name" type="xs:string" use="optional" />
<xs:attribute name="Method" type="xs:string" use="required" />
<xs:attribute name="IsComposable" type="xs:boolean" use="optional" />
</xs:complexType>
<xs:complexType name="Parameter">
<xs:attribute name="Name" type="xs:string" use="optional" />
<xs:attribute name="Parameter" type="xs:string" use="required" />
<xs:attribute name="DbType" type="xs:string" use="optional" />
<xs:attribute name="Direction" type="ParameterDirection" use="optional" />
</xs:complexType>
<xs:complexType name="Return">
<xs:attribute name="DbType" type="xs:string" use="optional" />
</xs:complexType>
<xs:simpleType name="UpdateCheck">
<xs:restriction base="xs:string">
<xs:enumeration value="Always" />
<xs:enumeration value="Never" />
<xs:enumeration value="WhenChanged" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ParameterDirection">
<xs:restriction base="xs:string">
<xs:enumeration value="In" />
<xs:enumeration value="Out" />
<xs:enumeration value="InOut" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="AutoSync">
<xs:restriction base="xs:string">
<xs:enumeration value="Never" />
<xs:enumeration value="OnInsert" />
<xs:enumeration value="OnUpdate" />
<xs:enumeration value="Always" />
<xs:enumeration value="Default" />
</xs:restriction>
</xs:simpleType>
</xs:schema>