외부 매핑 참조(LINQ to SQL)

LINQ to SQL은 외부 매핑을 지원합니다. 외부 매핑이란 별도의 XML 파일을 사용하여 데이터베이스의 데이터 모델과 개체 모델 사이의 매핑을 지정하는 프로세스입니다. 외부 매핑 파일을 사용하면 다음과 같은 장점이 있습니다.

  • 매핑 코드를 응용 프로그램 코드와 따로 유지할 수 있어 응용 프로그램 코드를 간단하게 표시할 수 있습니다.

  • 외부 매핑 파일을 구성 파일처럼 사용할 수 있습니다. 예를 들어 외부 매핑 파일을 바꾸는 방법으로 이진 파일을 배포한 후 응용 프로그램의 동작을 업데이트할 수 있습니다.

요구 사항

매핑 파일은 XML 파일이어야 하며 LINQ to SQL 스키마 정의 파일(.xsd)에 대해 유효성이 검사되어야 합니다. 

이때 적용되는 규칙은 다음과 같습니다.

  • 매핑 파일은 XML 파일이어야 합니다.

  • XML 매핑 파일은 XML 스키마 정의 파일에 대해 유효해야 합니다. 자세한 내용은 방법: DBML 및 외부 매핑 파일 유효성 검사(LINQ to SQL)를 참조하십시오.

  • 외부 매핑은 특성 기반 매핑을 재정의합니다. 즉, 외부 매핑 소스를 사용하여 DataContext를 만들면 DataContext에서는 사용자가 클래스에 만든 모든 매핑 특성을 무시합니다. 이 동작은 외부 매핑 파일에 클래스가 포함되었는지 여부에 관계없이 항상 적용됩니다.

  • LINQ to SQL에서는 특성 기반 매핑과 외부 매핑의 혼합 사용을 지원하지 않습니다.

XML 스키마 정의 파일

LINQ to SQL에서 외부 매핑은 다음 XML 스키마 정의에 대해 유효해야 합니다.

이 스키마 정의 파일은 DBML 파일의 유효성을 검사하는 데 사용하는 스키마 정의 파일과 다릅니다. 자세한 내용은 LINQ to SQL의 코드 생성을 참조하십시오.

참고참고

Visual Studio 사용자의 경우 이 XSD 파일은 XML 스키마 대화 상자에 "LinqToSqlMapping.xsd"로 표시됩니다.이 파일을 사용하여 외부 매핑 파일의 유효성을 검사하려면 방법: 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>

참고 항목

작업

방법: 개체 모델을 외부 파일로 생성(LINQ to SQL)

개념

LINQ to SQL의 코드 생성

기타 리소스

참조(LINQ to SQL)