Events
Mar 17, 9 PM - Mar 21, 10 AM
Join the meetup series to build scalable AI solutions based on real-world use cases with fellow developers and experts.
Register nowThis browser is no longer supported.
Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.
You can generate code to represent a database by using either the Object Relational Designer or the SQLMetal command-line tool. In either case, end-to-end code generation occurs in three stages:
For more information, see SqlMetal.exe (Code Generation Tool). Developers using Visual Studio can also use the Object Relational Designer to generate code. See LINQ to SQL Tools in Visual Studio.
The DBML Extractor is a LINQ to SQL component that takes database metadata as input and produces a DBML file as output.
The Code Generator is a LINQ to SQL component that translates DBML files to Visual Basic, C#, or XML mapping files.
The DBML file must be valid against the following schema definition as an XSD file.
Distinguish this schema definition file from the schema definition file that is used to validate an external mapping file. For more information, see External Mapping).
Note
Visual Studio users will also find this XSD file in the XML Schemas dialog box as "DbmlSchema.xsd". To use the XSD file correctly for validating a DBML file, see How to: Validate DBML and External Mapping Files.
<?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>
The following code is an excerpt from the DBML file created from the Northwind sample database. You can generate the whole file by using SQLMetal with the /xml option. For more information, see SqlMetal.exe (Code Generation Tool).
<?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>
Events
Mar 17, 9 PM - Mar 21, 10 AM
Join the meetup series to build scalable AI solutions based on real-world use cases with fellow developers and experts.
Register nowTraining
Module
Design a Performant Data Model in Azure SQL Database with Azure Data Studio - Training
Learn how to create a data model, tables, indexes, constraints, and use data types with Azure data studio.
Documentation
How to: Generate Customized Code by Modifying a DBML File - ADO.NET
Learn more about: How to: Generate Customized Code by Modifying a DBML File
LINQ to SQL O/R Designer overview - Visual Studio (Windows)
Explore LINQ to SQL tools in Visual Studio for object-relational mapping, including the Object Relational Designer (O/R Designer).
How to: Generate the Object Model in Visual Basic or C# - ADO.NET
Learn more about: How to: Generate the Object Model in Visual Basic or C#