LINQ to SQL'de kod oluşturma
Nesne İlişkisel Tasarımcısı veya SQLMetal komut satırı aracını kullanarak veritabanını temsil eden kod oluşturabilirsiniz. Her iki durumda da uçtan uca kod oluşturma işlemi üç aşamada gerçekleşir:
- DBML Ayıklayıcısı veritabanından şema bilgilerini ayıklar ve bilgileri XML biçimli bir DBML dosyasına yeniden birleştirir.
- DBML dosyası DBML Doğrulayıcı tarafından hatalar için taranır.
- Doğrulama hatası görüntülenmezse, dosya Kod Oluşturucu'ya geçirilir.
Daha fazla bilgi için bkz . SqlMetal.exe (Kod Oluşturma Aracı). Visual Studio kullanan geliştiriciler de kod oluşturmak için Nesne İlişkisel Tasarımcısı kullanabilir. Bkz. Visual Studio'da LINQ to SQL Araçları.
DBML Ayıklayıcı
DBML Ayıklayıcısı, veritabanı meta verilerini giriş olarak alan ve çıkış olarak bir DBML dosyası üreten bir LINQ to SQL bileşenidir.
Kod Oluşturucu
Kod Oluşturucu, DBML dosyalarını Visual Basic, C# veya XML eşleme dosyalarına çeviren bir LINQ to SQL bileşenidir.
XML Şema Tanım Dosyası
DBML dosyası, XSD dosyası olarak aşağıdaki şema tanımına göre geçerli olmalıdır.
Bu şema tanımı dosyasını, dış eşleme dosyasını doğrulamak için kullanılan şema tanımı dosyasından ayırt edin. Daha fazla bilgi için bkz . Dış Eşleme).
Not
Visual Studio kullanıcıları bu XSD dosyasını XML Şemaları iletişim kutusunda "DbmlSchema.xsd" olarak da bulur. Bir DBML dosyasını doğrulamak için XSD dosyasını doğru kullanmak için bkz . Nasıl yapılır: DBML ve Dış Eşleme Dosyalarını Doğrulama.
<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://schemas.microsoft.com/linqtosql/dbml/2007" xmlns="http://schemas.microsoft.com/linqtosql/dbml/2007"
elementFormDefault="qualified" >
<xs:element name="Database" type="Database" />
<xs:complexType name="Database">
<xs:sequence>
<xs:element name="Connection" type="Connection" minOccurs="0" maxOccurs="1" />
<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="EntityNamespace" type="xs:string" use="optional" />
<xs:attribute name="ContextNamespace" type="xs:string" use="optional" />
<xs:attribute name="Class" type="xs:string" use="optional" />
<xs:attribute name="AccessModifier" type="AccessModifier" use="optional" />
<xs:attribute name="Modifier" type="ClassModifier" use="optional" />
<xs:attribute name="BaseType" type="xs:string" use="optional" />
<xs:attribute name="Provider" type="xs:string" use="optional" />
<xs:attribute name="ExternalMapping" type="xs:boolean" use="optional" />
<xs:attribute name="Serialization" type="SerializationMode" use="optional" />
<xs:attribute name="EntityBase" type="xs:string" use="optional" />
</xs:complexType>
<xs:complexType name="Table">
<xs:all>
<xs:element name="Type" type="Type" minOccurs="1" maxOccurs="1" />
<xs:element name="InsertFunction" type="TableFunction" minOccurs="0" maxOccurs="1" />
<xs:element name="UpdateFunction" type="TableFunction" minOccurs="0" maxOccurs="1" />
<xs:element name="DeleteFunction" type="TableFunction" minOccurs="0" maxOccurs="1" />
</xs:all>
<xs:attribute name="Name" type="xs:string" use="required" />
<xs:attribute name="Member" type="xs:string" use="optional" />
<xs:attribute name="AccessModifier" type="AccessModifier" use="optional" />
<xs:attribute name="Modifier" type="MemberModifier" 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="IdRef" type="xs:IDREF" use="optional" />
<xs:attribute name="Id" type="xs:ID" use="optional" />
<xs:attribute name="Name" type="xs:string" use="optional" />
<xs:attribute name="InheritanceCode" type="xs:string" use="optional" />
<xs:attribute name="IsInheritanceDefault" type="xs:boolean" use="optional" />
<xs:attribute name="AccessModifier" type="AccessModifier" use="optional" />
<xs:attribute name="Modifier" type="ClassModifier" 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="optional" />
<xs:attribute name="Storage" type="xs:string" use="optional" />
<xs:attribute name="AccessModifier" type="AccessModifier" use="optional" />
<xs:attribute name="Modifier" type="MemberModifier" use="optional" />
<xs:attribute name="Type" type="xs:string" use="required" />
<xs:attribute name="DbType" type="xs:string" use="optional" />
<xs:attribute name="IsReadOnly" type="xs:boolean" 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="IsDelayLoaded" 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="required" />
<xs:attribute name="Member" type="xs:string" use="required" />
<xs:attribute name="Storage" type="xs:string" use="optional" />
<xs:attribute name="AccessModifier" type="AccessModifier" use="optional" />
<xs:attribute name="Modifier" type="MemberModifier" use="optional" />
<xs:attribute name="Type" type="xs:string" use="required" />
<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="Cardinality" type="Cardinality" 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="required" />
<xs:attribute name="Id" type="xs:ID" use="optional" />
<xs:attribute name="Method" type="xs:string" use="optional" />
<xs:attribute name="AccessModifier" type="AccessModifier" use="optional" />
<xs:attribute name="Modifier" type="MemberModifier" use="optional" />
<xs:attribute name="HasMultipleResults" type="xs:boolean" use="optional" />
<xs:attribute name="IsComposable" type="xs:boolean" use="optional" />
</xs:complexType>
<xs:complexType name="TableFunction">
<xs:sequence>
<xs:element name="Argument" type="TableFunctionParameter" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="Return" type="TableFunctionReturn" minOccurs="0" maxOccurs="1" />
</xs:sequence>
<xs:attribute name="FunctionId" type="xs:IDREF" use="required" />
<xs:attribute name="AccessModifier" type="AccessModifier" use="optional" />
</xs:complexType>
<xs:complexType name="Parameter">
<xs:attribute name="Name" type="xs:string" use="required" />
<xs:attribute name="Parameter" type="xs:string" use="optional" />
<xs:attribute name="Type" 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="Type" type="xs:string" use="required" />
<xs:attribute name="DbType" type="xs:string" use="optional" />
</xs:complexType>
<xs:complexType name="TableFunctionParameter">
<xs:attribute name="Parameter" type="xs:string" use="required" />
<xs:attribute name="Member" type="xs:string" use="required" />
<xs:attribute name="Version" type="Version" use="optional" />
</xs:complexType>
<xs:complexType name="TableFunctionReturn">
<xs:attribute name="Member" type="xs:string" use="required" />
</xs:complexType>
<xs:complexType name="Connection">
<xs:attribute name="Provider" type="xs:string" use="required" />
<xs:attribute name="Mode" type="ConnectionMode" use="optional" />
<xs:attribute name="ConnectionString" type="xs:string" use="optional" />
<xs:attribute name="SettingsObjectName" type="xs:string" use="optional" />
<xs:attribute name="SettingsPropertyName" type="xs:string" use="optional" />
</xs:complexType>
<xs:simpleType name="ConnectionMode">
<xs:restriction base="xs:string">
<xs:enumeration value="ConnectionString" />
<xs:enumeration value="AppSettings" />
<xs:enumeration value="WebSettings" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="AccessModifier">
<xs:restriction base="xs:string">
<xs:enumeration value="Public" />
<xs:enumeration value="Internal" />
<xs:enumeration value="Protected" />
<xs:enumeration value="ProtectedInternal" />
<xs:enumeration value="Private" />
</xs:restriction>
</xs:simpleType>
<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="SerializationMode">
<xs:restriction base="xs:string">
<xs:enumeration value="None" />
<xs:enumeration value="Unidirectional" />
</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="Version">
<xs:restriction base="xs:string">
<xs:enumeration value="Current" />
<xs:enumeration value="Original" />
</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:simpleType name="ClassModifier">
<xs:restriction base="xs:string">
<xs:enumeration value="Sealed" />
<xs:enumeration value="Abstract" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="MemberModifier">
<xs:restriction base="xs:string">
<xs:enumeration value="Virtual" />
<xs:enumeration value="Override" />
<xs:enumeration value="New" />
<xs:enumeration value="NewVirtual" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Cardinality">
<xs:restriction base="xs:string">
<xs:enumeration value="One" />
<xs:enumeration value="Many" />
</xs:restriction>
</xs:simpleType>
</xs:schema>
Örnek DBML Dosyası
Aşağıdaki kod, Northwind örnek veritabanından oluşturulan DBML dosyasından bir alıntıdır. /xml seçeneğiyle SQLMetal kullanarak dosyanın tamamını oluşturabilirsiniz. Daha fazla bilgi için bkz . SqlMetal.exe (Kod Oluşturma Aracı).
<?xml version="1.0" encoding="utf-16"?>
<Database Name="northwnd" Class="Northwnd" xmlns="http://schemas.microsoft.com/dsltools/DLinqML">
<Table Name="Customers">
<Type Name="Customer">
<Column Name="CustomerID" Type="System.String" DbType="NChar(5) NOT NULL" IsPrimaryKey="True" CanBeNull="False" />
<Column Name="CompanyName" Type="System.String" DbType="NVarChar(40) NOT NULL" CanBeNull="False" />
<Column Name="ContactName" Type="System.String" DbType="NVarChar(30)" CanBeNull="True" />
<Column Name="ContactTitle" Type="System.String" DbType="NVarChar(30)" CanBeNull="True" />
<Column Name="Address" Type="System.String" DbType="NVarChar(60)" CanBeNull="True" />
<Column Name="City" Type="System.String" DbType="NVarChar(15)" CanBeNull="True" />
<Column Name="Region" Type="System.String" DbType="NVarChar(15)" CanBeNull="True" />
<Column Name="PostalCode" Type="System.String" DbType="NVarChar(10)" CanBeNull="True" />
<Column Name="Country" Type="System.String" DbType="NVarChar(15)" CanBeNull="True" />
<Column Name="Phone" Type="System.String" DbType="NVarChar(24)" CanBeNull="True" />
<Column Name="Fax" Type="System.String" DbType="NVarChar(24)" CanBeNull="True" />
<Association Name="FK_CustomerCustomerDemo_Customers" Member="CustomerCustomerDemos" ThisKey="CustomerID" OtherKey="CustomerID" OtherTable="CustomerCustomerDemo" DeleteRule="NO ACTION" />
<Association Name="FK_Orders_Customers" Member="Orders" ThisKey="CustomerID" OtherKey="CustomerID" OtherTable="Orders" DeleteRule="NO ACTION" />
</Type>
</Table>
</Database>