共用方式為


外部對應參考 (LINQ to SQL)

更新: November 2007

LINQ to SQL 支援「外部對應」(External Mapping),在此處理序中,您可以使用另外的 XML 檔案來指定資料庫的資料模型與物件模型之間的對應。使用外部對應檔案的好處如下:

  • 您可以將對應程式碼與應用程式的程式碼分開來。如此一來,就可以避免應用程式的程式碼變得雜亂。

  • 您可以將外部對應檔案視為組態檔。例如,在交付二進位碼檔案之後,只要換掉外部對應檔案,就可以更新應用程式的行為。

需求

對應檔案必須是 XML 檔,而且檔案必須根據 LINQ to SQL 結構描述定義 (.xsd) 檔進行驗證。

可套用下列規則:

  • 對應檔案必須是 XML 檔。

  • XML 對應檔案必須根據 XML 結構描述定義檔進行驗證。如需詳細資訊,請參閱 HOW TO:驗證 DBML 和外部對應檔案 (LINQ to SQL)

  • 外部對應會覆寫以屬性 (Attribute) 為基礎的對應。也就是說,當您使用外部對應來源建立 DataContext 時,DataContext 會忽略已在類別上建立的所有對應屬性。不論類別是否包含在外部對應檔案中,結果都是一樣。

  • LINQ to SQL 不支援混合使用兩種對應方式 (以屬性為基礎和外部)。

  • 外部對應可以專屬於某個資料庫提供者。您可以在針對不同提供者使用不同外部對應,以此方式對應相同的類別。以屬性為基礎的對應並不支援此功能。

XML 結構描述定義檔

LINQ to SQL 中的外部對應必須根據下列 XML 結構描述定義進行驗證。

這個結構描述定義檔與用來驗證 DBML 檔案的結構描述定義檔不同。如需詳細資訊,請參閱 LINQ to SQL 的程式碼產生

注意事項:

Visual Studio 使用者也可在 [XML 結構描述] 對話方塊找到這個 XSD 檔,檔名為 "LinqToSqlMapping.xsd"。若要正確使用這個檔案來驗證外部對應檔案,請參閱 HOW TO:驗證 DBML 和外部對應檔案 (LINQ to SQL)

?<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="https://schemas.microsoft.com/linqtosql/mapping/2007" xmlns="https://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>

請參閱

工作

HOW TO:產生物件模型做為外部檔案 (LINQ to SQL)

概念

LINQ to SQL 的程式碼產生

其他資源

參考 (LINQ to SQL)