Spesifikasi MSL

Bahasa spesifikasi pemetaan (MSL) adalah bahasa berbasis XML yang menjelaskan pemetaan antara model konseptual dan model penyimpanan aplikasi Entity Framework.

Dalam aplikasi Entity Framework, metadata pemetaan dimuat dari file .msl (ditulis dalam MSL) pada waktu build. Entity Framework menggunakan metadata pemetaan pada runtime untuk menerjemahkan kueri terhadap model konseptual ke perintah khusus penyimpanan.

Perancang Kerangka Kerja Entitas (Desainer EF) menyimpan informasi pemetaan dalam file .edmx pada waktu desain. Pada waktu build, Perancang Entitas menggunakan informasi dalam file .edmx untuk membuat file .msl yang diperlukan oleh Entity Framework saat runtime

Nama semua jenis model konseptual atau penyimpanan yang dirujuk dalam MSL harus memenuhi syarat dengan nama namespace masing-masing. Untuk informasi tentang nama namespace layanan model konseptual, lihat Spesifikasi CSDL. Untuk informasi tentang nama namespace layanan model penyimpanan, lihat Spesifikasi SSDL.

Versi MSL dibingkai oleh namespace XML.

Versi MSL XML Namespace
MSL v1 urn:schemas-microsoft-com:windows:storage:mapping:CS
MSL v2 https://schemas.microsoft.com/ado/2008/09/mapping/cs
MSL v3 https://schemas.microsoft.com/ado/2009/11/mapping/cs

Elemen Alias (MSL)

Elemen Alias dalam pemetaan bahasa spesifikasi (MSL) adalah turunan dari elemen Pemetaan yang digunakan untuk menentukan alias untuk model konseptual dan namespace model penyimpanan. Nama semua jenis model konseptual atau penyimpanan yang dirujuk dalam MSL harus memenuhi syarat dengan nama namespace masing-masing. Untuk informasi tentang nama namespace layanan model konseptual, lihat Elemen Skema (CSDL). Untuk informasi tentang nama namespace layanan model penyimpanan, lihat Elemen Skema (SSDL).

Elemen Alias tidak boleh memiliki elemen turunan.

Atribut yang Berlaku

Tabel di bawah ini menjelaskan atribut yang dapat diterapkan ke elemen Alias .

Nama Atribut Diperlukan Nilai
Kunci Ya Alias untuk namespace yang ditentukan oleh atribut Value .
Nilai Ya Namespace yang nilai elemen Kuncinya adalah alias.

Contoh

Contoh berikut menunjukkan elemen Alias yang mendefinisikan alias, c, untuk jenis yang ditentukan dalam model konseptual.

 <Mapping Space="C-S"
          xmlns="https://schemas.microsoft.com/ado/2009/11/mapping/cs">
   <Alias Key="c" Value="SchoolModel"/>
   <EntityContainerMapping StorageEntityContainer="SchoolModelStoreContainer"
                           CdmEntityContainer="SchoolModelEntities">
     <EntitySetMapping Name="Courses">
       <EntityTypeMapping TypeName="c.Course">
         <MappingFragment StoreEntitySet="Course">
           <ScalarProperty Name="CourseID" ColumnName="CourseID" />
           <ScalarProperty Name="Title" ColumnName="Title" />
           <ScalarProperty Name="Credits" ColumnName="Credits" />
           <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
         </MappingFragment>
       </EntityTypeMapping>
     </EntitySetMapping>
     <EntitySetMapping Name="Departments">
       <EntityTypeMapping TypeName="c.Department">
         <MappingFragment StoreEntitySet="Department">
           <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
           <ScalarProperty Name="Name" ColumnName="Name" />
           <ScalarProperty Name="Budget" ColumnName="Budget" />
           <ScalarProperty Name="StartDate" ColumnName="StartDate" />
           <ScalarProperty Name="Administrator" ColumnName="Administrator" />
         </MappingFragment>
       </EntityTypeMapping>
     </EntitySetMapping>
   </EntityContainerMapping>
 </Mapping>

Elemen AssociationEnd (MSL)

Elemen AssociationEnd dalam pemetaan bahasa spesifikasi (MSL) digunakan ketika fungsi modifikasi jenis entitas dalam model konseptual dipetakan ke prosedur tersimpan dalam database yang mendasar. Jika prosedur tersimpan modifikasi mengambil parameter yang nilainya disimpan dalam properti asosiasi, elemen AssociationEnd memetakan nilai properti ke parameter . Untuk informasi selengkapnya, lihat contoh di bawah ini.

Untuk informasi selengkapnya tentang memetakan fungsi modifikasi jenis entitas ke prosedur tersimpan, lihat ModificationFunctionMapping Element (MSL) dan Panduan: Memetakan Entitas ke Prosedur Tersimpan.

Elemen AssociationEnd dapat memiliki elemen turunan berikut:

  • ScalarProperty

Atribut yang Berlaku

Tabel berikut ini menjelaskan atribut yang berlaku untuk elemen AssociationEnd .

Nama Atribut Diperlukan Nilai
Himpunan Asosiasi Ya Nama asosiasi yang sedang dipetakan.
Dari Ya Nilai atribut FromRole dari properti navigasi yang sesuai dengan asosiasi yang sedang dipetakan. Untuk informasi selengkapnya, lihat NavigationProperty Element (CSDL).
Untuk Ya Nilai atribut ToRole dari properti navigasi yang sesuai dengan asosiasi yang sedang dipetakan. Untuk informasi selengkapnya, lihat NavigationProperty Element (CSDL).

Contoh

Pertimbangkan jenis entitas model konseptual berikut:

 <EntityType Name="Course">
   <Key>
     <PropertyRef Name="CourseID" />
   </Key>
   <Property Type="Int32" Name="CourseID" Nullable="false" />
   <Property Type="String" Name="Title" Nullable="false" MaxLength="100"
             FixedLength="false" Unicode="true" />
   <Property Type="Int32" Name="Credits" Nullable="false" />
   <NavigationProperty Name="Department"
                       Relationship="SchoolModel.FK_Course_Department"
                       FromRole="Course" ToRole="Department" />
 </EntityType>

Pertimbangkan juga prosedur tersimpan berikut:

 CREATE PROCEDURE [dbo].[UpdateCourse]
                                @CourseID int,
                                @Title nvarchar(50),
                                @Credits int,
                                @DepartmentID int
                                AS
                                UPDATE Course SET Title=@Title,
                                                              Credits=@Credits,
                                                              DepartmentID=@DepartmentID
                                WHERE CourseID=@CourseID;

Untuk memetakan fungsi pembaruan entitas ke prosedur tersimpan Course ini, Anda harus memberikan nilai ke parameter DepartmentID . Nilai untuk DepartmentID tidak sesuai dengan properti pada jenis entitas; nilai tersebut terkandung dalam asosiasi independen yang pemetaannya ditunjukkan di sini:

 <AssociationSetMapping Name="FK_Course_Department"
                        TypeName="SchoolModel.FK_Course_Department"
                        StoreEntitySet="Course">
   <EndProperty Name="Course">
     <ScalarProperty Name="CourseID" ColumnName="CourseID" />
   </EndProperty>
   <EndProperty Name="Department">
     <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
   </EndProperty>
 </AssociationSetMapping>

Kode berikut menunjukkan elemen AssociationEnd yang digunakan untuk memetakan properti DepartmentID dari asosiasi FK_Course_Department ke prosedur tersimpan UpdateCourse (tempat fungsi pembaruan dari jenis entitas Kursus dipetakan):

 <EntitySetMapping Name="Courses">
   <EntityTypeMapping TypeName="SchoolModel.Course">
     <MappingFragment StoreEntitySet="Course">
       <ScalarProperty Name="Credits" ColumnName="Credits" />
       <ScalarProperty Name="Title" ColumnName="Title" />
       <ScalarProperty Name="CourseID" ColumnName="CourseID" />
     </MappingFragment>
   </EntityTypeMapping>
   <EntityTypeMapping TypeName="SchoolModel.Course">
     <ModificationFunctionMapping>
       <UpdateFunction FunctionName="SchoolModel.Store.UpdateCourse">
         <AssociationEnd AssociationSet="FK_Course_Department"
                         From="Course" To="Department">
           <ScalarProperty Name="DepartmentID"
                           ParameterName="DepartmentID"
                           Version="Current" />
         </AssociationEnd>
         <ScalarProperty Name="Credits" ParameterName="Credits"
                         Version="Current" />
         <ScalarProperty Name="Title" ParameterName="Title"
                         Version="Current" />
         <ScalarProperty Name="CourseID" ParameterName="CourseID"
                         Version="Current" />
       </UpdateFunction>
     </ModificationFunctionMapping>
   </EntityTypeMapping>
 </EntitySetMapping>

Elemen AssociationSetMapping (MSL)

Elemen AssociationSetMapping dalam pemetaan bahasa spesifikasi (MSL) mendefinisikan pemetaan antara asosiasi dalam model konseptual dan kolom tabel dalam database yang mendasar.

Asosiasi dalam model konseptual adalah jenis yang propertinya mewakili kolom kunci primer dan asing dalam database yang mendasar. Elemen AssociationSetMapping menggunakan dua elemen EndProperty untuk menentukan pemetaan antara properti jenis asosiasi dan kolom dalam database. Anda dapat menempatkan kondisi pada pemetaan ini dengan elemen Kondisi. Petakan fungsi sisipkan, perbarui, dan hapus untuk asosiasi ke prosedur tersimpan dalam database dengan elemen ModificationFunctionMapping. Tentukan pemetaan baca-saja antara asosiasi dan kolom tabel dengan menggunakan string Entity SQL dalam elemen QueryView.

Catatan

Jika batasan referensial didefinisikan untuk asosiasi dalam model konseptual, asosiasi tidak perlu dipetakan dengan elemen AssociationSetMapping . Jika elemen AssociationSetMapping ada untuk asosiasi yang memiliki batasan referensial, pemetaan yang ditentukan dalam elemen AssociationSetMapping akan diabaikan. Untuk informasi selengkapnya, lihat ReferentialConstraint Element (CSDL).

Elemen AssociationSetMapping dapat memiliki elemen turunan berikut

  • QueryView (nol atau satu)
  • EndProperty (nol atau dua)
  • Kondisi (nol atau lebih)
  • ModificationFunctionMapping (nol atau satu)

Atribut yang Berlaku

Tabel berikut menjelaskan atribut yang dapat diterapkan ke elemen AssociationSetMapping .

Nama Atribut Diperlukan Nilai
Nama Ya Nama kumpulan asosiasi model konseptual yang sedang dipetakan.
TypeName Tidak Nama yang memenuhi syarat namespace dari jenis asosiasi model konseptual yang sedang dipetakan.
StoreEntitySet Tidak Nama tabel yang sedang dipetakan.

Contoh

Contoh berikut menunjukkan elemen AssociationSetMapping tempat asosiasi FK_Course_Department diatur dalam model konseptual dipetakan ke tabel Kursus dalam database. Pemetaan antara properti jenis asosiasi dan kolom tabel ditentukan dalam elemen EndProperty turunan.

 <AssociationSetMapping Name="FK_Course_Department"
                        TypeName="SchoolModel.FK_Course_Department"
                        StoreEntitySet="Course">
   <EndProperty Name="Department">
     <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
   </EndProperty>
   <EndProperty Name="Course">
     <ScalarProperty Name="CourseID" ColumnName="CourseID" />
   </EndProperty>
 </AssociationSetMapping>

Elemen ComplexProperty (MSL)

Elemen ComplexProperty dalam pemetaan bahasa spesifikasi (MSL) menentukan pemetaan antara properti jenis kompleks pada jenis entitas model konseptual dan kolom tabel dalam database yang mendasar. Pemetaan kolom properti ditentukan dalam elemen ScalarProperty turunan.

Elemen properti ComplexType dapat memiliki elemen turunan berikut:

  • ScalarProperty (nol atau lebih)
  • ComplexProperty (nol atau lebih)
  • ComplexTypeMapping (nol atau lebih)
  • Kondisi (nol atau lebih)

Atribut yang Berlaku

Tabel berikut menjelaskan atribut yang berlaku untuk elemen ComplexProperty :

Nama Atribut Diperlukan Nilai
Nama Ya Nama properti kompleks dari jenis entitas dalam model konseptual yang sedang dipetakan.
TypeName Tidak Nama yang memenuhi syarat namespace dari jenis properti model konseptual.

Contoh

Contoh berikut didasarkan pada model Sekolah. Jenis kompleks berikut telah ditambahkan ke model konseptual:

 <ComplexType Name="FullName">
   <Property Type="String" Name="LastName"
             Nullable="false" MaxLength="50"
             FixedLength="false" Unicode="true" />
   <Property Type="String" Name="FirstName"
             Nullable="false" MaxLength="50"
             FixedLength="false" Unicode="true" />
 </ComplexType>

Properti LastName dan FirstName dari jenis entitas Orang telah diganti dengan satu properti kompleks, Nama:

 <EntityType Name="Person">
   <Key>
     <PropertyRef Name="PersonID" />
   </Key>
   <Property Name="PersonID" Type="Int32" Nullable="false"
             annotation:StoreGeneratedPattern="Identity" />
   <Property Name="HireDate" Type="DateTime" />
   <Property Name="EnrollmentDate" Type="DateTime" />
   <Property Name="Name" Type="SchoolModel.FullName" Nullable="false" />
 </EntityType>

MSL berikut ini memperlihatkan elemen ComplexProperty yang digunakan untuk memetakan properti Nama ke kolom dalam database yang mendasar:

 <EntitySetMapping Name="People">
   <EntityTypeMapping TypeName="SchoolModel.Person">
     <MappingFragment StoreEntitySet="Person">
       <ScalarProperty Name="PersonID" ColumnName="PersonID" />
       <ScalarProperty Name="HireDate" ColumnName="HireDate" />
       <ScalarProperty Name="EnrollmentDate" ColumnName="EnrollmentDate" />
       <ComplexProperty Name="Name" TypeName="SchoolModel.FullName">
         <ScalarProperty Name="FirstName" ColumnName="FirstName" />
         <ScalarProperty Name="LastName" ColumnName="LastName" />  
       </ComplexProperty>
     </MappingFragment>
   </EntityTypeMapping>
 </EntitySetMapping>

Elemen ComplexTypeMapping (MSL)

Elemen ComplexTypeMapping dalam pemetaan bahasa spesifikasi (MSL) adalah turunan dari elemen ResultMapping dan menentukan pemetaan antara impor fungsi dalam model konseptual dan prosedur tersimpan dalam database yang mendasar ketika berikut ini benar:

  • Impor fungsi mengembalikan jenis kompleks konseptual.
  • Nama kolom yang dikembalikan oleh prosedur tersimpan tidak sama persis dengan nama properti pada jenis kompleks.

Secara default, pemetaan antara kolom yang dikembalikan oleh prosedur tersimpan dan jenis kompleks didasarkan pada nama kolom dan properti. Jika nama kolom tidak sama persis dengan nama properti, Anda harus menggunakan elemen ComplexTypeMapping untuk menentukan pemetaan. Untuk contoh pemetaan default, lihat FunctionImportMapping Element (MSL).

Elemen ComplexTypeMapping dapat memiliki elemen turunan berikut:

  • ScalarProperty (nol atau lebih)

Atribut yang Berlaku

Tabel berikut menjelaskan atribut yang berlaku untuk elemen ComplexTypeMapping .

Nama Atribut Diperlukan Nilai
TypeName Ya Nama yang memenuhi syarat namespace dari jenis kompleks yang sedang dipetakan.

Contoh

Pertimbangkan prosedur tersimpan berikut:

 CREATE PROCEDURE [dbo].[GetGrades]
             @student_Id int
             AS
             SELECT     EnrollmentID as enroll_id,
                                                                             Grade as grade,
                                                                             CourseID as course_id,
                                                                             StudentID as student_id
                                               FROM dbo.StudentGrade
             WHERE StudentID = @student_Id

Pertimbangkan juga jenis kompleks model konseptual berikut:

 <ComplexType Name="GradeInfo">
   <Property Type="Int32" Name="EnrollmentID" Nullable="false" />
   <Property Type="Decimal" Name="Grade" Nullable="true"
             Precision="3" Scale="2" />
   <Property Type="Int32" Name="CourseID" Nullable="false" />
   <Property Type="Int32" Name="StudentID" Nullable="false" />
 </ComplexType>

Untuk membuat impor fungsi yang mengembalikan instans dari jenis kompleks sebelumnya, pemetaan antara kolom yang dikembalikan oleh prosedur tersimpan dan jenis entitas harus ditentukan dalam elemen ComplexTypeMapping :

 <FunctionImportMapping FunctionImportName="GetGrades"
                        FunctionName="SchoolModel.Store.GetGrades" >
   <ResultMapping>
     <ComplexTypeMapping TypeName="SchoolModel.GradeInfo">
       <ScalarProperty Name="EnrollmentID" ColumnName="enroll_id"/>
       <ScalarProperty Name="CourseID" ColumnName="course_id"/>
       <ScalarProperty Name="StudentID" ColumnName="student_id"/>
       <ScalarProperty Name="Grade" ColumnName="grade"/>
     </ComplexTypeMapping>
   </ResultMapping>
 </FunctionImportMapping>

Elemen Kondisi (MSL)

Elemen Kondisi dalam pemetaan bahasa spesifikasi (MSL) menempatkan kondisi pada pemetaan antara model konseptual dan database yang mendasar. Pemetaan yang ditentukan dalam simpul XML valid jika semua kondisi, seperti yang ditentukan dalam elemen Kondisi anak, terpenuhi. Jika tidak, pemetaan tidak valid. Misalnya, jika elemen MappingFragment berisi satu atau beberapa elemen anak Kondisi, pemetaan yang ditentukan dalam simpul MappingFragment hanya akan valid jika semua kondisi elemen Kondisi anak terpenuhi.

Setiap kondisi dapat berlaku untuk Nama (nama properti entitas model konseptual, yang ditentukan oleh atribut Nama), atau ColumnName (nama kolom dalam database, yang ditentukan oleh atribut ColumnName). Saat atribut Nama diatur, kondisi diperiksa terhadap nilai properti entitas. Saat atribut ColumnName diatur, kondisi diperiksa terhadap nilai kolom. Hanya salah satu atribut Nama atau ColumnName yang dapat ditentukan dalam elemen Kondisi .

Catatan

Saat elemen Kondisi digunakan dalam elemen FunctionImportMapping, hanya atribut Nama yang tidak berlaku.

Elemen Kondisi bisa menjadi turunan dari elemen berikut:

  • AssociationSetMapping
  • ComplexProperty
  • EntitySetMapping
  • PemetaanFragment
  • EntityTypeMapping

Elemen Kondisi tidak boleh memiliki elemen turunan.

Atribut yang Berlaku

Tabel berikut ini menjelaskan atribut yang berlaku untuk elemen Kondisi :

Nama Atribut Diperlukan Nilai
ColumnName Tidak Nama kolom tabel yang nilainya digunakan untuk mengevaluasi kondisi.
IsNull Tidak Benar atau Salah. Jika nilainya True dan nilai kolom null, atau jika nilainya False dan nilai kolom tidak null, kondisinya benar. Jika tidak, kondisinya salah.
Atribut IsNull dan Value tidak dapat digunakan secara bersamaan.
Nilai Tidak Nilai yang nilai kolomnya dibandingkan. Jika nilainya sama, kondisinya benar. Jika tidak, kondisinya salah.
Atribut IsNull dan Value tidak dapat digunakan secara bersamaan.
Nama Tidak Nama properti entitas model konseptual yang nilainya digunakan untuk mengevaluasi kondisi.
Atribut ini tidak berlaku jika elemen Kondisi digunakan dalam elemen FunctionImportMapping.

Contoh

Contoh berikut menunjukkan elemen Kondisi sebagai turunan dari elemen MappingFragment . Saat HireDate tidak null dan EnrollmentDate null, data dipetakan antara jenis SchoolModel.Instructor dan kolom PersonID dan HireDate dari tabel Orang . Ketika EnrollmentDate tidak null dan HireDate null, data dipetakan antara jenis SchoolModel.Student dan kolom PersonID dan Pendaftaran tabel Orang .

 <EntitySetMapping Name="People">
   <EntityTypeMapping TypeName="IsTypeOf(SchoolModel.Person)">
     <MappingFragment StoreEntitySet="Person">
       <ScalarProperty Name="PersonID" ColumnName="PersonID" />
       <ScalarProperty Name="FirstName" ColumnName="FirstName" />
       <ScalarProperty Name="LastName" ColumnName="LastName" />
     </MappingFragment>
   </EntityTypeMapping>
   <EntityTypeMapping TypeName="IsTypeOf(SchoolModel.Instructor)">
     <MappingFragment StoreEntitySet="Person">
       <ScalarProperty Name="PersonID" ColumnName="PersonID" />
       <ScalarProperty Name="HireDate" ColumnName="HireDate" />
       <Condition ColumnName="HireDate" IsNull="false" />
       <Condition ColumnName="EnrollmentDate" IsNull="true" />
     </MappingFragment>
   </EntityTypeMapping>
   <EntityTypeMapping TypeName="IsTypeOf(SchoolModel.Student)">
     <MappingFragment StoreEntitySet="Person">
       <ScalarProperty Name="PersonID" ColumnName="PersonID" />
       <ScalarProperty Name="EnrollmentDate"
                       ColumnName="EnrollmentDate" />
       <Condition ColumnName="EnrollmentDate" IsNull="false" />
       <Condition ColumnName="HireDate" IsNull="true" />
     </MappingFragment>
   </EntityTypeMapping>
 </EntitySetMapping>

Elemen DeleteFunction (MSL)

Elemen DeleteFunction dalam pemetaan bahasa spesifikasi (MSL) memetakan fungsi penghapusan jenis entitas atau asosiasi dalam model konseptual ke prosedur tersimpan dalam database yang mendasar. Prosedur tersimpan tempat fungsi modifikasi dipetakan harus dideklarasikan dalam model penyimpanan. Untuk informasi selengkapnya, lihat Elemen Fungsi (SSDL).

Catatan

Jika Anda tidak memetakan ketiga operasi sisipkan, perbarui, atau hapus jenis entitas ke prosedur tersimpan, operasi yang tidak dipetakan akan gagal jika dijalankan saat runtime dan UpdateException dilemparkan.

DeleteFunction Diterapkan ke EntityTypeMapping

Saat diterapkan ke elemen EntityTypeMapping, elemen DeleteFunction memetakan fungsi penghapusan jenis entitas dalam model konseptual ke prosedur tersimpan.

Elemen DeleteFunction dapat memiliki elemen turunan berikut saat diterapkan ke elemen EntityTypeMapping :

  • AssociationEnd (nol atau lebih)
  • ComplexProperty (nol atau lebih)
  • ScalarProperty (nol atau lebih)

Atribut yang Berlaku

Tabel berikut menjelaskan atribut yang dapat diterapkan ke elemen DeleteFunction saat diterapkan ke elemen EntityTypeMapping .

Nama Atribut Diperlukan Nilai
FunctionName Ya Nama prosedur tersimpan yang memenuhi syarat namespace layanan tempat fungsi penghapusan dipetakan. Prosedur tersimpan harus dideklarasikan dalam model penyimpanan.
RowsAffectedParameter Tidak Nama parameter output yang mengembalikan jumlah baris yang terpengaruh.

Contoh

Contoh berikut didasarkan pada model Sekolah dan memperlihatkan elemen DeleteFunction yang memetakan fungsi penghapusan jenis entitas Orang ke prosedur tersimpan DeletePerson . Prosedur tersimpan DeletePerson dinyatakan dalam model penyimpanan.

 <EntitySetMapping Name="People">
   <EntityTypeMapping TypeName="SchoolModel.Person">
     <MappingFragment StoreEntitySet="Person">
       <ScalarProperty Name="PersonID" ColumnName="PersonID" />
       <ScalarProperty Name="LastName" ColumnName="LastName" />
       <ScalarProperty Name="FirstName" ColumnName="FirstName" />
       <ScalarProperty Name="HireDate" ColumnName="HireDate" />
       <ScalarProperty Name="EnrollmentDate"
                       ColumnName="EnrollmentDate" />
     </MappingFragment>
 </EntityTypeMapping>
   <EntityTypeMapping TypeName="SchoolModel.Person">
     <ModificationFunctionMapping>
       <InsertFunction FunctionName="SchoolModel.Store.InsertPerson">
         <ScalarProperty Name="EnrollmentDate"
                         ParameterName="EnrollmentDate" />
         <ScalarProperty Name="HireDate" ParameterName="HireDate" />
         <ScalarProperty Name="FirstName" ParameterName="FirstName" />
         <ScalarProperty Name="LastName" ParameterName="LastName" />
         <ResultBinding Name="PersonID" ColumnName="NewPersonID" />
       </InsertFunction>
       <UpdateFunction FunctionName="SchoolModel.Store.UpdatePerson">
         <ScalarProperty Name="EnrollmentDate"
                         ParameterName="EnrollmentDate"
                         Version="Current" />
         <ScalarProperty Name="HireDate" ParameterName="HireDate"
                         Version="Current" />
         <ScalarProperty Name="FirstName" ParameterName="FirstName"
                         Version="Current" />
         <ScalarProperty Name="LastName" ParameterName="LastName"
                         Version="Current" />
         <ScalarProperty Name="PersonID" ParameterName="PersonID"
                         Version="Current" />
       </UpdateFunction>
       <DeleteFunction FunctionName="SchoolModel.Store.DeletePerson">
         <ScalarProperty Name="PersonID" ParameterName="PersonID" />
       </DeleteFunction>
     </ModificationFunctionMapping>
   </EntityTypeMapping>
 </EntitySetMapping>

DeleteFunction Diterapkan ke AssociationSetMapping

Saat diterapkan ke elemen AssociationSetMapping, elemen DeleteFunction memetakan fungsi penghapusan asosiasi dalam model konseptual ke prosedur tersimpan.

Elemen DeleteFunction dapat memiliki elemen turunan berikut saat diterapkan ke elemen AssociationSetMapping :

  • EndProperty

Atribut yang Berlaku

Tabel berikut menjelaskan atribut yang dapat diterapkan ke elemen DeleteFunction saat diterapkan ke elemen AssociationSetMapping .

Nama Atribut Diperlukan Nilai
FunctionName Ya Nama prosedur tersimpan yang memenuhi syarat namespace layanan tempat fungsi penghapusan dipetakan. Prosedur tersimpan harus dideklarasikan dalam model penyimpanan.
RowsAffectedParameter Tidak Nama parameter output yang mengembalikan jumlah baris yang terpengaruh.

Contoh

Contoh berikut didasarkan pada model Sekolah dan menunjukkan elemen DeleteFunction yang digunakan untuk memetakan fungsi penghapusan asosiasi CourseInstructor ke prosedur tersimpan DeleteCourseInstructor . Prosedur tersimpan DeleteCourseInstructor dinyatakan dalam model penyimpanan.

 <AssociationSetMapping Name="CourseInstructor"
                        TypeName="SchoolModel.CourseInstructor"
                        StoreEntitySet="CourseInstructor">
   <EndProperty Name="Person">
     <ScalarProperty Name="PersonID" ColumnName="PersonID" />
   </EndProperty>
   <EndProperty Name="Course">
     <ScalarProperty Name="CourseID" ColumnName="CourseID" />
   </EndProperty>
   <ModificationFunctionMapping>
     <InsertFunction FunctionName="SchoolModel.Store.InsertCourseInstructor" >   
       <EndProperty Name="Course">
         <ScalarProperty Name="CourseID" ParameterName="courseId"/>
       </EndProperty>
       <EndProperty Name="Person">
         <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
       </EndProperty>
     </InsertFunction>
     <DeleteFunction FunctionName="SchoolModel.Store.DeleteCourseInstructor">
       <EndProperty Name="Course">
         <ScalarProperty Name="CourseID" ParameterName="courseId"/>
       </EndProperty>
       <EndProperty Name="Person">
         <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
       </EndProperty>
     </DeleteFunction>
   </ModificationFunctionMapping>
 </AssociationSetMapping>

Elemen EndProperty (MSL)

Elemen EndProperty dalam pemetaan bahasa spesifikasi (MSL) mendefinisikan pemetaan antara fungsi akhir atau modifikasi asosiasi model konseptual dan database yang mendasar. Pemetaan kolom properti ditentukan dalam elemen ScalarProperty turunan.

Ketika elemen EndProperty digunakan untuk menentukan pemetaan akhir asosiasi model konseptual, elemen ini adalah turunan dari elemen AssociationSetMapping. Ketika elemen EndProperty digunakan untuk menentukan pemetaan untuk fungsi modifikasi asosiasi model konseptual, elemen ini adalah turunan dari elemen InsertFunction atau elemen DeleteFunction.

Elemen EndProperty dapat memiliki elemen turunan berikut:

  • ScalarProperty (nol atau lebih)

Atribut yang Berlaku

Tabel berikut menjelaskan atribut yang berlaku untuk elemen EndProperty :

Nama Atribut Diperlukan Nilai
Nama Ya Nama akhir asosiasi yang sedang dipetakan.

Contoh

Contoh berikut menunjukkan elemen AssociationSetMapping tempat asosiasi FK_Course_Department dalam model konseptual dipetakan ke tabel Kursus dalam database. Pemetaan antara properti jenis asosiasi dan kolom tabel ditentukan dalam elemen EndProperty turunan.

 <AssociationSetMapping Name="FK_Course_Department"
                        TypeName="SchoolModel.FK_Course_Department"
                        StoreEntitySet="Course">
   <EndProperty Name="Department">
     <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
   </EndProperty>
   <EndProperty Name="Course">
     <ScalarProperty Name="CourseID" ColumnName="CourseID" />
   </EndProperty>
 </AssociationSetMapping>

Contoh

Contoh berikut menunjukkan elemen EndProperty yang memetakan fungsi sisipkan dan hapus asosiasi (CourseInstructor) ke prosedur tersimpan dalam database yang mendasar. Fungsi yang dipetakan dideklarasikan dalam model penyimpanan.

 <AssociationSetMapping Name="CourseInstructor"
                        TypeName="SchoolModel.CourseInstructor"
                        StoreEntitySet="CourseInstructor">
   <EndProperty Name="Person">
     <ScalarProperty Name="PersonID" ColumnName="PersonID" />
   </EndProperty>
   <EndProperty Name="Course">
     <ScalarProperty Name="CourseID" ColumnName="CourseID" />
   </EndProperty>
   <ModificationFunctionMapping>
     <InsertFunction FunctionName="SchoolModel.Store.InsertCourseInstructor" >   
       <EndProperty Name="Course">
         <ScalarProperty Name="CourseID" ParameterName="courseId"/>
       </EndProperty>
       <EndProperty Name="Person">
         <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
       </EndProperty>
     </InsertFunction>
     <DeleteFunction FunctionName="SchoolModel.Store.DeleteCourseInstructor">
       <EndProperty Name="Course">
         <ScalarProperty Name="CourseID" ParameterName="courseId"/>
       </EndProperty>
       <EndProperty Name="Person">
         <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
       </EndProperty>
     </DeleteFunction>
   </ModificationFunctionMapping>
 </AssociationSetMapping>

EntityContainerMapping Element (MSL)

Elemen EntityContainerMapping dalam pemetaan bahasa spesifikasi (MSL) memetakan kontainer entitas dalam model konseptual ke kontainer entitas dalam model penyimpanan. Elemen EntityContainerMapping adalah turunan dari elemen Pemetaan.

Elemen EntityContainerMapping dapat memiliki elemen turunan berikut (dalam urutan yang tercantum):

  • EntitySetMapping (nol atau lebih)
  • AssociationSetMapping (nol atau lebih)
  • FunctionImportMapping (nol atau lebih)

Atribut yang Berlaku

Tabel berikut menjelaskan atribut yang dapat diterapkan ke elemen EntityContainerMapping .

Nama Atribut Diperlukan Nilai
StorageModelContainer Ya Nama kontainer entitas model penyimpanan yang sedang dipetakan.
CdmEntityContainer Ya Nama kontainer entitas model konseptual yang sedang dipetakan.
GenerateUpdateViews Tidak Benar atau Salah. Jika False, tidak ada tampilan pembaruan yang dihasilkan. Atribut ini harus diatur ke False ketika Anda memiliki pemetaan baca-saja yang tidak valid karena data mungkin tidak berhasil pulang pergi.
Nilai defaultnya adalah True.

Contoh

Contoh berikut menunjukkan elemen EntityContainerMapping yang memetakan kontainer SchoolModelEntities (kontainer entitas model konseptual) ke kontainer SchoolModelStoreContainer (kontainer entitas model penyimpanan):

 <EntityContainerMapping StorageEntityContainer="SchoolModelStoreContainer"
                         CdmEntityContainer="SchoolModelEntities">
   <EntitySetMapping Name="Courses">
     <EntityTypeMapping TypeName="c.Course">
       <MappingFragment StoreEntitySet="Course">
         <ScalarProperty Name="CourseID" ColumnName="CourseID" />
         <ScalarProperty Name="Title" ColumnName="Title" />
         <ScalarProperty Name="Credits" ColumnName="Credits" />
         <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
       </MappingFragment>
     </EntityTypeMapping>
   </EntitySetMapping>
   <EntitySetMapping Name="Departments">
     <EntityTypeMapping TypeName="c.Department">
       <MappingFragment StoreEntitySet="Department">
         <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
         <ScalarProperty Name="Name" ColumnName="Name" />
         <ScalarProperty Name="Budget" ColumnName="Budget" />
         <ScalarProperty Name="StartDate" ColumnName="StartDate" />
         <ScalarProperty Name="Administrator" ColumnName="Administrator" />
       </MappingFragment>
     </EntityTypeMapping>
   </EntitySetMapping>
 </EntityContainerMapping>

Elemen EntitySetMapping (MSL)

Elemen EntitySetMapping dalam pemetaan bahasa spesifikasi (MSL) memetakan semua jenis dalam entitas model konseptual yang diatur ke kumpulan entitas dalam model penyimpanan. Entitas yang ditetapkan dalam model konseptual adalah kontainer logis untuk instans entitas dengan jenis yang sama (dan jenis turunan). Entitas yang diatur dalam model penyimpanan mewakili tabel atau tampilan dalam database yang mendasar. Kumpulan entitas model konseptual ditentukan oleh nilai atribut Nama elemen EntitySetMapping. Tabel atau tampilan yang dipetakan ditentukan oleh atribut StoreEntitySet di setiap elemen MappingFragment turunan atau di elemen EntitySetMapping itu sendiri.

Elemen EntitySetMapping dapat memiliki elemen turunan berikut:

  • EntityTypeMapping (nol atau lebih)
  • QueryView (nol atau satu)
  • MappingFragment (nol atau lebih)

Atribut yang Berlaku

Tabel berikut menjelaskan atribut yang dapat diterapkan ke elemen EntitySetMapping .

Nama Atribut Diperlukan Nilai
Nama Ya Nama kumpulan entitas model konseptual yang sedang dipetakan.
TypeName1 Tidak Nama jenis entitas model konseptual yang sedang dipetakan.
StoreEntitySet1 Tidak Nama kumpulan entitas model penyimpanan yang sedang dipetakan.
MakeColumnsDistinct Tidak True atau False tergantung pada apakah hanya baris berbeda yang dikembalikan.
Jika atribut ini diatur ke True, atribut GenerateUpdateViews dari elemen EntityContainerMapping harus diatur ke False.

 

1 Atribut TypeName dan StoreEntitySet dapat digunakan sebagai pengganti elemen anak EntityTypeMapping dan MappingFragment untuk memetakan satu jenis entitas ke satu tabel.

Contoh

Contoh berikut menunjukkan elemen EntitySetMapping yang memetakan tiga jenis (jenis dasar dan dua jenis turunan) dalam kumpulan entitas Kursus dari model konseptual ke tiga tabel berbeda dalam database dasar. Tabel ditentukan oleh atribut StoreEntitySet di setiap elemen MappingFragment .

 <EntitySetMapping Name="Courses">
   <EntityTypeMapping TypeName="IsTypeOf(SchoolModel1.Course)">
     <MappingFragment StoreEntitySet="Course">
       <ScalarProperty Name="CourseID" ColumnName="CourseID" />
       <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
       <ScalarProperty Name="Credits" ColumnName="Credits" />
       <ScalarProperty Name="Title" ColumnName="Title" />
     </MappingFragment>
   </EntityTypeMapping>
   <EntityTypeMapping TypeName="IsTypeOf(SchoolModel1.OnlineCourse)">
     <MappingFragment StoreEntitySet="OnlineCourse">
       <ScalarProperty Name="CourseID" ColumnName="CourseID" />
       <ScalarProperty Name="URL" ColumnName="URL" />
     </MappingFragment>
   </EntityTypeMapping>
   <EntityTypeMapping TypeName="IsTypeOf(SchoolModel1.OnsiteCourse)">
     <MappingFragment StoreEntitySet="OnsiteCourse">
       <ScalarProperty Name="CourseID" ColumnName="CourseID" />
       <ScalarProperty Name="Time" ColumnName="Time" />
       <ScalarProperty Name="Days" ColumnName="Days" />
       <ScalarProperty Name="Location" ColumnName="Location" />
     </MappingFragment>
   </EntityTypeMapping>
 </EntitySetMapping>

Elemen EntityTypeMapping (MSL)

Elemen EntityTypeMapping dalam pemetaan bahasa spesifikasi (MSL) menentukan pemetaan antara jenis entitas dalam model konseptual dan tabel atau tampilan dalam database yang mendasar. Untuk informasi tentang jenis entitas model konseptual dan tabel atau tampilan database yang mendasar, lihat EntityType Element (CSDL) dan EntitySet Element (SSDL). Jenis entitas model konseptual yang sedang dipetakan ditentukan oleh atribut TypeName dari elemen EntityTypeMapping . Tabel atau tampilan yang sedang dipetakan ditentukan oleh atribut StoreEntitySet dari elemen MappingFragment turunan.

Elemen turunan ModificationFunctionMapping dapat digunakan untuk memetakan fungsi sisipkan, perbarui, atau hapus jenis entitas ke prosedur tersimpan dalam database.

Elemen EntityTypeMapping dapat memiliki elemen turunan berikut:

  • MappingFragment (nol atau lebih)
  • ModificationFunctionMapping (nol atau satu)
  • ScalarProperty
  • Kondisi

Catatan

Elemen MappingFragment dan ModificationFunctionMapping tidak dapat menjadi elemen turunan dari elemen EntityTypeMapping secara bersamaan .

Catatan

Elemen ScalarProperty dan Condition hanya dapat menjadi elemen turunan dari elemen EntityTypeMapping saat digunakan dalam elemen FunctionImportMapping.

Atribut yang Berlaku

Tabel berikut ini menjelaskan atribut yang dapat diterapkan ke elemen EntityTypeMapping .

Nama Atribut Diperlukan Nilai
TypeName Ya Nama yang memenuhi syarat namespace dari jenis entitas model konseptual yang sedang dipetakan.
Jika jenisnya abstrak atau jenis turunan, nilainya harus IsOfType(Namespace-qualified_type_name).

Contoh

Contoh berikut menunjukkan elemen EntitySetMapping dengan dua elemen EntityTypeMapping turunan. Dalam elemen EntityTypeMapping pertama, jenis entitas SchoolModel.Person dipetakan ke tabel Orang. Dalam elemen EntityTypeMapping kedua, fungsionalitas pembaruan jenis SchoolModel.Person dipetakan ke prosedur tersimpan, UpdatePerson, dalam database.

 <EntitySetMapping Name="People">
   <EntityTypeMapping TypeName="SchoolModel.Person">
     <MappingFragment StoreEntitySet="Person">
       <ScalarProperty Name="PersonID" ColumnName="PersonID" />
       <ScalarProperty Name="LastName" ColumnName="LastName" />
       <ScalarProperty Name="FirstName" ColumnName="FirstName" />
       <ScalarProperty Name="HireDate" ColumnName="HireDate" />
       <ScalarProperty Name="EnrollmentDate" ColumnName="EnrollmentDate" />
     </MappingFragment>
   </EntityTypeMapping>
   <EntityTypeMapping TypeName="SchoolModel.Person">
     <ModificationFunctionMapping>
       <UpdateFunction FunctionName="SchoolModel.Store.UpdatePerson">
         <ScalarProperty Name="EnrollmentDate" ParameterName="EnrollmentDate"
                         Version="Current" />
         <ScalarProperty Name="HireDate" ParameterName="HireDate"
                         Version="Current" />
         <ScalarProperty Name="FirstName" ParameterName="FirstName"
                         Version="Current" />
         <ScalarProperty Name="LastName" ParameterName="LastName"
                         Version="Current" />
         <ScalarProperty Name="PersonID" ParameterName="PersonID"
                         Version="Current" />
       </UpdateFunction>
     </ModificationFunctionMapping>
   </EntityTypeMapping>
 </EntitySetMapping>

Contoh

Contoh berikutnya menunjukkan pemetaan hierarki jenis di mana jenis akar abstrak. Perhatikan penggunaan IsOfType sintaks untuk atribut TypeName .

 <EntitySetMapping Name="People">
   <EntityTypeMapping TypeName="IsTypeOf(SchoolModel.Person)">
     <MappingFragment StoreEntitySet="Person">
       <ScalarProperty Name="PersonID" ColumnName="PersonID" />
       <ScalarProperty Name="FirstName" ColumnName="FirstName" />
       <ScalarProperty Name="LastName" ColumnName="LastName" />
     </MappingFragment>
   </EntityTypeMapping>
   <EntityTypeMapping TypeName="IsTypeOf(SchoolModel.Instructor)">
     <MappingFragment StoreEntitySet="Person">
       <ScalarProperty Name="PersonID" ColumnName="PersonID" />
       <ScalarProperty Name="HireDate" ColumnName="HireDate" />
       <Condition ColumnName="HireDate" IsNull="false" />
       <Condition ColumnName="EnrollmentDate" IsNull="true" />
     </MappingFragment>
   </EntityTypeMapping>
   <EntityTypeMapping TypeName="IsTypeOf(SchoolModel.Student)">
     <MappingFragment StoreEntitySet="Person">
       <ScalarProperty Name="PersonID" ColumnName="PersonID" />
       <ScalarProperty Name="EnrollmentDate"
                       ColumnName="EnrollmentDate" />
       <Condition ColumnName="EnrollmentDate" IsNull="false" />
       <Condition ColumnName="HireDate" IsNull="true" />
     </MappingFragment>
   </EntityTypeMapping>
 </EntitySetMapping>

FunctionImportMapping Element (MSL)

Elemen FunctionImportMapping dalam pemetaan bahasa spesifikasi (MSL) mendefinisikan pemetaan antara impor fungsi dalam model konseptual dan prosedur atau fungsi tersimpan dalam database dasar. Impor fungsi harus dideklarasikan dalam model konseptual dan prosedur tersimpan harus dideklarasikan dalam model penyimpanan. Untuk informasi selengkapnya, lihat FunctionImport Element (CSDL) dan Function Element (SSDL).

Catatan

Secara default, jika impor fungsi mengembalikan jenis entitas model konseptual atau jenis kompleks, maka nama kolom yang dikembalikan oleh prosedur tersimpan yang mendasar harus sama persis dengan nama properti pada jenis model konseptual. Jika nama kolom tidak sama persis dengan nama properti, pemetaan harus ditentukan dalam elemen ResultMapping.

Elemen FunctionImportMapping dapat memiliki elemen turunan berikut:

  • ResultMapping (nol atau lebih)

Atribut yang Berlaku

Tabel berikut menjelaskan atribut yang berlaku untuk elemen FunctionImportMapping :

Nama Atribut Diperlukan Nilai
FunctionImportName Ya Nama impor fungsi dalam model konseptual yang sedang dipetakan.
FunctionName Ya Nama fungsi yang memenuhi syarat namespace layanan dalam model penyimpanan yang sedang dipetakan.

Contoh

Contoh berikut didasarkan pada model Sekolah. Pertimbangkan fungsi berikut dalam model penyimpanan:

 <Function Name="GetStudentGrades" Aggregate="false"
           BuiltIn="false" NiladicFunction="false"
           IsComposable="false" ParameterTypeSemantics="AllowImplicitConversion"
           Schema="dbo">
   <Parameter Name="StudentID" Type="int" Mode="In" />
 </Function>

Pertimbangkan juga impor fungsi ini dalam model konseptual:

 <FunctionImport Name="GetStudentGrades" EntitySet="StudentGrades"
                 ReturnType="Collection(SchoolModel.StudentGrade)">
   <Parameter Name="StudentID" Mode="In" Type="Int32" />
 </FunctionImport>

Contoh berikut menunjukkan elemen FunctionImportMapping yang digunakan untuk memetakan fungsi dan impor fungsi di atas satu sama lain:

 <FunctionImportMapping FunctionImportName="GetStudentGrades"
                        FunctionName="SchoolModel.Store.GetStudentGrades" />

 

InsertFunction Element (MSL)

Elemen InsertFunction dalam pemetaan bahasa spesifikasi (MSL) memetakan fungsi sisipan jenis entitas atau asosiasi dalam model konseptual ke prosedur tersimpan dalam database yang mendasar. Prosedur tersimpan tempat fungsi modifikasi dipetakan harus dideklarasikan dalam model penyimpanan. Untuk informasi selengkapnya, lihat Elemen Fungsi (SSDL).

Catatan

Jika Anda tidak memetakan ketiga operasi sisipkan, perbarui, atau hapus jenis entitas ke prosedur tersimpan, operasi yang tidak dipetakan akan gagal jika dijalankan saat runtime dan UpdateException dilemparkan.

Elemen InsertFunction dapat menjadi turunan dari elemen ModificationFunctionMapping dan diterapkan ke elemen EntityTypeMapping atau elemen AssociationSetMapping.

InsertFunction Diterapkan ke EntityTypeMapping

Saat diterapkan ke elemen EntityTypeMapping, elemen InsertFunction memetakan fungsi sisipan jenis entitas dalam model konseptual ke prosedur tersimpan.

Elemen InsertFunction dapat memiliki elemen turunan berikut saat diterapkan ke elemen EntityTypeMapping :

  • AssociationEnd (nol atau lebih)
  • ComplexProperty (nol atau lebih)
  • ResultBinding (nol atau satu)
  • ScalarProperty (nol atau lebih)

Atribut yang Berlaku

Tabel berikut ini menjelaskan atribut yang dapat diterapkan ke elemen InsertFunction saat diterapkan ke elemen EntityTypeMapping .

Nama Atribut Diperlukan Nilai
FunctionName Ya Nama prosedur tersimpan yang memenuhi syarat namespace layanan tempat fungsi sisipkan dipetakan. Prosedur tersimpan harus dideklarasikan dalam model penyimpanan.
RowsAffectedParameter Tidak Nama parameter output yang mengembalikan jumlah baris yang terpengaruh.

Contoh

Contoh berikut didasarkan pada model Sekolah dan memperlihatkan elemen InsertFunction yang digunakan untuk memetakan fungsi penyisipan jenis entitas Orang ke prosedur tersimpan InsertPerson . Prosedur tersimpan InsertPerson dinyatakan dalam model penyimpanan.

 <EntityTypeMapping TypeName="SchoolModel.Person">
   <ModificationFunctionMapping>
     <InsertFunction FunctionName="SchoolModel.Store.InsertPerson">
       <ScalarProperty Name="EnrollmentDate"
                       ParameterName="EnrollmentDate" />
       <ScalarProperty Name="HireDate" ParameterName="HireDate" />
       <ScalarProperty Name="FirstName" ParameterName="FirstName" />
       <ScalarProperty Name="LastName" ParameterName="LastName" />
       <ResultBinding Name="PersonID" ColumnName="NewPersonID" />
     </InsertFunction>
     <UpdateFunction FunctionName="SchoolModel.Store.UpdatePerson">
       <ScalarProperty Name="EnrollmentDate"
                       ParameterName="EnrollmentDate"
                       Version="Current" />
       <ScalarProperty Name="HireDate" ParameterName="HireDate"
                       Version="Current" />
       <ScalarProperty Name="FirstName" ParameterName="FirstName"
                       Version="Current" />
       <ScalarProperty Name="LastName" ParameterName="LastName"
                       Version="Current" />
       <ScalarProperty Name="PersonID" ParameterName="PersonID"
                       Version="Current" />
     </UpdateFunction>
     <DeleteFunction FunctionName="SchoolModel.Store.DeletePerson">
       <ScalarProperty Name="PersonID" ParameterName="PersonID" />
     </DeleteFunction>
   </ModificationFunctionMapping>
 </EntityTypeMapping>

InsertFunction Diterapkan ke AssociationSetMapping

Saat diterapkan ke elemen AssociationSetMapping, elemen InsertFunction memetakan fungsi sisipkan asosiasi dalam model konseptual ke prosedur tersimpan.

Elemen InsertFunction dapat memiliki elemen turunan berikut saat diterapkan ke elemen AssociationSetMapping :

  • EndProperty

Atribut yang Berlaku

Tabel berikut ini menjelaskan atribut yang dapat diterapkan ke elemen InsertFunction saat diterapkan ke elemen AssociationSetMapping .

Nama Atribut Diperlukan Nilai
FunctionName Ya Nama prosedur tersimpan yang memenuhi syarat namespace layanan tempat fungsi sisipkan dipetakan. Prosedur tersimpan harus dideklarasikan dalam model penyimpanan.
RowsAffectedParameter Tidak Nama parameter output yang mengembalikan jumlah baris yang terpengaruh.

Contoh

Contoh berikut didasarkan pada model Sekolah dan menunjukkan elemen InsertFunction yang digunakan untuk memetakan fungsi penyisipan asosiasi CourseInstructor ke prosedur tersimpan InsertCourseInstructor . Prosedur tersimpan InsertCourseInstructor dinyatakan dalam model penyimpanan.

 <AssociationSetMapping Name="CourseInstructor"
                        TypeName="SchoolModel.CourseInstructor"
                        StoreEntitySet="CourseInstructor">
   <EndProperty Name="Person">
     <ScalarProperty Name="PersonID" ColumnName="PersonID" />
   </EndProperty>
   <EndProperty Name="Course">
     <ScalarProperty Name="CourseID" ColumnName="CourseID" />
   </EndProperty>
   <ModificationFunctionMapping>
     <InsertFunction FunctionName="SchoolModel.Store.InsertCourseInstructor" >   
       <EndProperty Name="Course">
         <ScalarProperty Name="CourseID" ParameterName="courseId"/>
       </EndProperty>
       <EndProperty Name="Person">
         <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
       </EndProperty>
     </InsertFunction>
     <DeleteFunction FunctionName="SchoolModel.Store.DeleteCourseInstructor">
       <EndProperty Name="Course">
         <ScalarProperty Name="CourseID" ParameterName="courseId"/>
       </EndProperty>
       <EndProperty Name="Person">
         <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
       </EndProperty>
     </DeleteFunction>
   </ModificationFunctionMapping>
 </AssociationSetMapping>

Elemen Pemetaan (MSL)

Elemen Pemetaan dalam bahasa spesifikasi pemetaan (MSL) berisi informasi untuk memetakan objek yang ditentukan dalam model konseptual ke database (seperti yang dijelaskan dalam model penyimpanan). Untuk informasi selengkapnya, lihat Spesifikasi CSDL dan Spesifikasi SSDL.

Elemen Pemetaan adalah elemen akar untuk spesifikasi pemetaan. Namespace XML untuk spesifikasi pemetaan adalah https://schemas.microsoft.com/ado/2009/11/mapping/cs.

Elemen pemetaan dapat memiliki elemen turunan berikut (dalam urutan yang tercantum):

  • Alias (nol atau lebih)
  • EntityContainerMapping (tepat satu)

Nama jenis model konseptual dan penyimpanan yang dirujuk dalam MSL harus memenuhi syarat dengan nama namespace layanan masing-masing. Untuk informasi tentang nama namespace layanan model konseptual, lihat Elemen Skema (CSDL). Untuk informasi tentang nama namespace layanan model penyimpanan, lihat Elemen Skema (SSDL). Alias untuk namespace yang digunakan dalam MSL dapat didefinisikan dengan elemen Alias.

Atribut yang Berlaku

Tabel di bawah ini menjelaskan atribut yang dapat diterapkan ke elemen Pemetaan .

Nama Atribut Diperlukan Nilai
Ruang Ya C-S. Ini adalah nilai tetap dan tidak dapat diubah.

Contoh

Contoh berikut menunjukkan elemen Pemetaan yang didasarkan pada bagian dari model Sekolah. Untuk informasi selengkapnya tentang model Sekolah, lihat Mulai Cepat (Kerangka Kerja Entitas):

 <Mapping Space="C-S"
          xmlns="https://schemas.microsoft.com/ado/2009/11/mapping/cs">
   <Alias Key="c" Value="SchoolModel"/>
   <EntityContainerMapping StorageEntityContainer="SchoolModelStoreContainer"
                           CdmEntityContainer="SchoolModelEntities">
     <EntitySetMapping Name="Courses">
       <EntityTypeMapping TypeName="c.Course">
         <MappingFragment StoreEntitySet="Course">
           <ScalarProperty Name="CourseID" ColumnName="CourseID" />
           <ScalarProperty Name="Title" ColumnName="Title" />
           <ScalarProperty Name="Credits" ColumnName="Credits" />
           <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
         </MappingFragment>
       </EntityTypeMapping>
     </EntitySetMapping>
     <EntitySetMapping Name="Departments">
       <EntityTypeMapping TypeName="c.Department">
         <MappingFragment StoreEntitySet="Department">
           <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
           <ScalarProperty Name="Name" ColumnName="Name" />
           <ScalarProperty Name="Budget" ColumnName="Budget" />
           <ScalarProperty Name="StartDate" ColumnName="StartDate" />
           <ScalarProperty Name="Administrator" ColumnName="Administrator" />
         </MappingFragment>
       </EntityTypeMapping>
     </EntitySetMapping>
   </EntityContainerMapping>
 </Mapping>

MappingFragment Element (MSL)

Elemen MappingFragment dalam pemetaan bahasa spesifikasi (MSL) menentukan pemetaan antara properti jenis entitas model konseptual dan tabel atau tampilan dalam database. Untuk informasi tentang jenis entitas model konseptual dan tabel atau tampilan database yang mendasar, lihat EntityType Element (CSDL) dan EntitySet Element (SSDL). MappingFragment dapat menjadi elemen turunan dari elemen EntityTypeMapping atau elemen EntitySetMapping.

Elemen MappingFragment dapat memiliki elemen turunan berikut:

  • ComplexType (nol atau lebih)
  • ScalarProperty (nol atau lebih)
  • Kondisi (nol atau lebih)

Atribut yang Berlaku

Tabel berikut menjelaskan atribut yang dapat diterapkan ke elemen MappingFragment .

Nama Atribut Diperlukan Nilai
StoreEntitySet Ya Nama tabel atau tampilan yang sedang dipetakan.
MakeColumnsDistinct Tidak True atau False tergantung pada apakah hanya baris berbeda yang dikembalikan.
Jika atribut ini diatur ke True, atribut GenerateUpdateViews dari elemen EntityContainerMapping harus diatur ke False.

Contoh

Contoh berikut menunjukkan elemen MappingFragment sebagai turunan dari elemen EntityTypeMapping . Dalam contoh ini, properti jenis Kursus dalam model konseptual dipetakan ke kolom tabel Kursus dalam database.

 <EntitySetMapping Name="Courses">
   <EntityTypeMapping TypeName="SchoolModel.Course">
     <MappingFragment StoreEntitySet="Course">
       <ScalarProperty Name="CourseID" ColumnName="CourseID" />
       <ScalarProperty Name="Title" ColumnName="Title" />
       <ScalarProperty Name="Credits" ColumnName="Credits" />
       <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
     </MappingFragment>
   </EntityTypeMapping>
 </EntitySetMapping>

Contoh

Contoh berikut menunjukkan elemen MappingFragment sebagai turunan dari elemen EntitySetMapping . Seperti dalam contoh di atas, properti jenis Kursus dalam model konseptual dipetakan ke kolom tabel Kursus dalam database.

 <EntitySetMapping Name="Courses" TypeName="SchoolModel.Course">
     <MappingFragment StoreEntitySet="Course">
       <ScalarProperty Name="CourseID" ColumnName="CourseID" />
       <ScalarProperty Name="Title" ColumnName="Title" />
       <ScalarProperty Name="Credits" ColumnName="Credits" />
       <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
     </MappingFragment>
 </EntitySetMapping>

Elemen ModificationFunctionMapping (MSL)

Elemen ModificationFunctionMapping dalam pemetaan bahasa spesifikasi (MSL) memetakan fungsi sisipkan, perbarui, dan hapus dari jenis entitas model konseptual ke prosedur tersimpan dalam database yang mendasar. Elemen ModificationFunctionMapping juga dapat memetakan fungsi sisipkan dan hapus untuk asosiasi banyak-ke-banyak dalam model konseptual ke prosedur tersimpan dalam database yang mendasar. Prosedur tersimpan tempat fungsi modifikasi dipetakan harus dideklarasikan dalam model penyimpanan. Untuk informasi selengkapnya, lihat Elemen Fungsi (SSDL).

Catatan

Jika Anda tidak memetakan ketiga operasi sisipkan, perbarui, atau hapus jenis entitas ke prosedur tersimpan, operasi yang tidak dipetakan akan gagal jika dijalankan saat runtime dan UpdateException dilemparkan.

Catatan

Jika fungsi modifikasi untuk satu entitas dalam hierarki warisan dipetakan ke prosedur tersimpan, maka fungsi modifikasi untuk semua jenis dalam hierarki harus dipetakan ke prosedur tersimpan.

Elemen ModificationFunctionMapping dapat menjadi turunan dari elemen EntityTypeMapping atau elemen AssociationSetMapping.

Elemen ModificationFunctionMapping dapat memiliki elemen turunan berikut:

  • DeleteFunction (nol atau satu)
  • InsertFunction (nol atau satu)
  • UpdateFunction (nol atau satu)

Tidak ada atribut yang berlaku untuk elemen ModificationFunctionMapping .

Contoh

Contoh berikut menunjukkan pemetaan kumpulan entitas untuk entitas Orang yang ditetapkan dalam model Sekolah. Selain pemetaan kolom untuk jenis entitas Orang , pemetaan fungsi sisipkan, perbarui, dan hapus jenis Orang ditampilkan. Fungsi yang dipetakan dideklarasikan dalam model penyimpanan.

 <EntitySetMapping Name="People">
   <EntityTypeMapping TypeName="SchoolModel.Person">
     <MappingFragment StoreEntitySet="Person">
       <ScalarProperty Name="PersonID" ColumnName="PersonID" />
       <ScalarProperty Name="LastName" ColumnName="LastName" />
       <ScalarProperty Name="FirstName" ColumnName="FirstName" />
       <ScalarProperty Name="HireDate" ColumnName="HireDate" />
       <ScalarProperty Name="EnrollmentDate"
                       ColumnName="EnrollmentDate" />
     </MappingFragment>
 </EntityTypeMapping>
   <EntityTypeMapping TypeName="SchoolModel.Person">
     <ModificationFunctionMapping>
       <InsertFunction FunctionName="SchoolModel.Store.InsertPerson">
         <ScalarProperty Name="EnrollmentDate"
                         ParameterName="EnrollmentDate" />
         <ScalarProperty Name="HireDate" ParameterName="HireDate" />
         <ScalarProperty Name="FirstName" ParameterName="FirstName" />
         <ScalarProperty Name="LastName" ParameterName="LastName" />
         <ResultBinding Name="PersonID" ColumnName="NewPersonID" />
       </InsertFunction>
       <UpdateFunction FunctionName="SchoolModel.Store.UpdatePerson">
         <ScalarProperty Name="EnrollmentDate"
                         ParameterName="EnrollmentDate"
                         Version="Current" />
         <ScalarProperty Name="HireDate" ParameterName="HireDate"
                         Version="Current" />
         <ScalarProperty Name="FirstName" ParameterName="FirstName"
                         Version="Current" />
         <ScalarProperty Name="LastName" ParameterName="LastName"
                         Version="Current" />
         <ScalarProperty Name="PersonID" ParameterName="PersonID"
                         Version="Current" />
       </UpdateFunction>
       <DeleteFunction FunctionName="SchoolModel.Store.DeletePerson">
         <ScalarProperty Name="PersonID" ParameterName="PersonID" />
       </DeleteFunction>
     </ModificationFunctionMapping>
   </EntityTypeMapping>
 </EntitySetMapping>

Contoh

Contoh berikut menunjukkan pemetaan set asosiasi untuk asosiasi CourseInstructor yang ditetapkan dalam model Sekolah. Selain pemetaan kolom untuk asosiasi CourseInstructor , pemetaan fungsi sisipkan dan hapus dari asosiasi CourseInstructor ditampilkan. Fungsi yang dipetakan dideklarasikan dalam model penyimpanan.

 <AssociationSetMapping Name="CourseInstructor"
                        TypeName="SchoolModel.CourseInstructor"
                        StoreEntitySet="CourseInstructor">
   <EndProperty Name="Person">
     <ScalarProperty Name="PersonID" ColumnName="PersonID" />
   </EndProperty>
   <EndProperty Name="Course">
     <ScalarProperty Name="CourseID" ColumnName="CourseID" />
   </EndProperty>
   <ModificationFunctionMapping>
     <InsertFunction FunctionName="SchoolModel.Store.InsertCourseInstructor" >   
       <EndProperty Name="Course">
         <ScalarProperty Name="CourseID" ParameterName="courseId"/>
       </EndProperty>
       <EndProperty Name="Person">
         <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
       </EndProperty>
     </InsertFunction>
     <DeleteFunction FunctionName="SchoolModel.Store.DeleteCourseInstructor">
       <EndProperty Name="Course">
         <ScalarProperty Name="CourseID" ParameterName="courseId"/>
       </EndProperty>
       <EndProperty Name="Person">
         <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
       </EndProperty>
     </DeleteFunction>
   </ModificationFunctionMapping>
 </AssociationSetMapping>

 

 

Elemen QueryView (MSL)

Elemen QueryView dalam pemetaan bahasa spesifikasi (MSL) mendefinisikan pemetaan baca-saja antara jenis entitas atau asosiasi dalam model konseptual dan tabel dalam database yang mendasar. Pemetaan didefinisikan dengan kueri SQL Entitas yang dievaluasi terhadap model penyimpanan, dan Anda mengekspresikan hasil yang ditetapkan dalam hal entitas atau asosiasi dalam model konseptual. Karena tampilan kueri bersifat baca-saja, Anda tidak dapat menggunakan perintah pembaruan standar untuk memperbarui tipe yang ditentukan oleh tampilan kueri. Anda dapat membuat pembaruan untuk jenis ini dengan menggunakan fungsi modifikasi. Untuk informasi selengkapnya, lihat Cara: Memetakan Fungsi Modifikasi ke Prosedur Tersimpan.

Catatan

Dalam elemen QueryView, ekspresi SQL Entitas yang berisi GroupBy, agregat grup, atau properti navigasi tidak didukung.

 

Elemen QueryView dapat menjadi turunan dari elemen EntitySetMapping atau elemen AssociationSetMapping. Dalam kasus sebelumnya, tampilan kueri menentukan pemetaan baca-saja untuk entitas dalam model konseptual. Dalam kasus terakhir, tampilan kueri menentukan pemetaan baca-saja untuk asosiasi dalam model konseptual.

Catatan

Jika elemen AssociationSetMapping adalah untuk asosiasi dengan batasan referensial, elemen AssociationSetMapping diabaikan. Untuk informasi selengkapnya, lihat ReferentialConstraint Element (CSDL).

Elemen QueryView tidak boleh memiliki elemen turunan.

Atribut yang Berlaku

Tabel berikut ini menjelaskan atribut yang dapat diterapkan ke elemen QueryView .

Nama Atribut Diperlukan Nilai
TypeName Tidak Nama jenis model konseptual yang sedang dipetakan oleh tampilan kueri.

Contoh

Contoh berikut menunjukkan elemen QueryView sebagai turunan dari elemen EntitySetMapping dan menentukan pemetaan tampilan kueri untuk jenis entitas Departemen dalam Model Sekolah.

 <EntitySetMapping Name="Departments" >
   <QueryView>
     SELECT VALUE SchoolModel.Department(d.DepartmentID,
                                         d.Name,
                                         d.Budget,
                                         d.StartDate)
     FROM SchoolModelStoreContainer.Department AS d
     WHERE d.Budget > 150000
   </QueryView>
 </EntitySetMapping>

Karena kueri hanya mengembalikan subset anggota jenis Departemen dalam model penyimpanan, jenis Departemen dalam model Sekolah telah dimodifikasi berdasarkan pemetaan ini sebagai berikut:

 <EntityType Name="Department">
   <Key>
     <PropertyRef Name="DepartmentID" />
   </Key>
   <Property Type="Int32" Name="DepartmentID" Nullable="false" />
   <Property Type="String" Name="Name" Nullable="false"
             MaxLength="50" FixedLength="false" Unicode="true" />
   <Property Type="Decimal" Name="Budget" Nullable="false"
             Precision="19" Scale="4" />
   <Property Type="DateTime" Name="StartDate" Nullable="false" />
   <NavigationProperty Name="Courses"
                       Relationship="SchoolModel.FK_Course_Department"
                       FromRole="Department" ToRole="Course" />
 </EntityType>

Contoh

Contoh berikutnya memperlihatkan elemen QueryView sebagai turunan dari elemen AssociationSetMapping dan menentukan pemetaan baca-saja untuk FK_Course_Department asosiasi dalam model Sekolah.

 <EntityContainerMapping StorageEntityContainer="SchoolModelStoreContainer"
                         CdmEntityContainer="SchoolEntities">
   <EntitySetMapping Name="Courses" >
     <QueryView>
       SELECT VALUE SchoolModel.Course(c.CourseID,
                                       c.Title,
                                       c.Credits)
       FROM SchoolModelStoreContainer.Course AS c
     </QueryView>
   </EntitySetMapping>
   <EntitySetMapping Name="Departments" >
     <QueryView>
       SELECT VALUE SchoolModel.Department(d.DepartmentID,
                                           d.Name,
                                           d.Budget,
                                           d.StartDate)
       FROM SchoolModelStoreContainer.Department AS d
       WHERE d.Budget > 150000
     </QueryView>
   </EntitySetMapping>
   <AssociationSetMapping Name="FK_Course_Department" >
     <QueryView>
       SELECT VALUE SchoolModel.FK_Course_Department(
         CREATEREF(SchoolEntities.Departments, row(c.DepartmentID), SchoolModel.Department),
         CREATEREF(SchoolEntities.Courses, row(c.CourseID)) )
       FROM SchoolModelStoreContainer.Course AS c
     </QueryView>
   </AssociationSetMapping>
 </EntityContainerMapping>

 

Komentar

Anda bisa menentukan tampilan kueri untuk mengaktifkan skenario berikut:

  • Tentukan entitas dalam model konseptual yang tidak menyertakan semua properti entitas dalam model penyimpanan. Ini termasuk properti yang tidak memiliki nilai default dan tidak mendukung nilai null .
  • Petakan kolom komputasi dalam model penyimpanan ke properti jenis entitas dalam model konseptual.
  • Tentukan pemetaan di mana kondisi yang digunakan untuk mempartisi entitas dalam model konseptual tidak didasarkan pada kesetaraan. Saat Anda menentukan pemetaan bersyarkat menggunakan elemen Kondisi , kondisi yang disediakan harus sama dengan nilai yang ditentukan. Untuk informasi selengkapnya, lihat Elemen Kondisi (MSL).
  • Petakan kolom yang sama dalam model penyimpanan ke beberapa jenis dalam model konseptual.
  • Petakan beberapa jenis ke tabel yang sama.
  • Tentukan asosiasi dalam model konseptual yang tidak didasarkan pada kunci asing dalam skema relasional.
  • Gunakan logika bisnis kustom untuk mengatur nilai properti dalam model konseptual. Misalnya, Anda dapat memetakan nilai string "T" di sumber data ke nilai true, Boolean, dalam model konseptual.
  • Tentukan filter bersyarah untuk hasil kueri.
  • Menerapkan lebih sedikit pembatasan pada data dalam model konseptual daripada dalam model penyimpanan. Misalnya, Anda dapat membuat properti dalam model konseptual dapat diubah ke null meskipun kolom yang dipetakan tidak mendukung nilai null.

Pertimbangan berikut berlaku saat Anda menentukan tampilan kueri untuk entitas:

  • Tampilan kueri bersifat baca-saja. Anda hanya dapat membuat pembaruan pada entitas dengan menggunakan fungsi modifikasi.
  • Saat Anda menentukan jenis entitas menurut tampilan kueri, Anda juga harus menentukan semua entitas terkait menurut tampilan kueri.
  • Saat Anda memetakan asosiasi banyak ke banyak ke entitas dalam model penyimpanan yang mewakili tabel tautan dalam skema relasional, Anda harus menentukan elemen QueryView di elemen AssociationSetMapping untuk tabel tautan ini.
  • Tampilan kueri harus ditentukan untuk semua tipe dalam hierarki tipe. Anda dapat melakukannya dengan salah satu cara berikut:
    • Dengan satu elemen QueryView yang menentukan satu kueri SQL Entitas yang mengembalikan gabungan semua jenis entitas dalam hierarki.
    • Dengan satu elemen QueryView yang menentukan satu kueri SQL Entitas yang menggunakan operator CASE untuk mengembalikan jenis entitas tertentu dalam hierarki berdasarkan kondisi tertentu.
    • Dengan elemen QueryView tambahan untuk jenis tertentu dalam hierarki. Dalam hal ini, gunakan atribut TypeName dari elemen QueryView untuk menentukan jenis entitas untuk setiap tampilan.
  • Saat tampilan kueri ditentukan, Anda tidak dapat menentukan atribut StorageSetName pada elemen EntitySetMapping .
  • Saat tampilan kueri ditentukan, elemen EntitySetMappingjuga tidak dapat berisi pemetaan Properti .

Elemen ResultBinding (MSL)

Elemen ResultBinding dalam pemetaan bahasa spesifikasi (MSL) memetakan nilai kolom yang dikembalikan oleh prosedur tersimpan ke properti entitas dalam model konseptual ketika fungsi modifikasi jenis entitas dipetakan ke prosedur tersimpan dalam database yang mendasar. Misalnya, ketika nilai kolom identitas dikembalikan oleh prosedur tersimpan sisipan, elemen ResultBinding memetakan nilai yang dikembalikan ke properti jenis entitas dalam model konseptual.

Elemen ResultBinding dapat berupa turunan dari elemen InsertFunction atau elemen UpdateFunction.

Elemen ResultBinding tidak dapat memiliki elemen turunan.

Atribut yang Berlaku

Tabel berikut menjelaskan atribut yang berlaku untuk elemen ResultBinding :

Nama Atribut Diperlukan Nilai
Nama Ya Nama properti entitas dalam model konseptual yang sedang dipetakan.
ColumnName Ya Nama kolom yang sedang dipetakan.

Contoh

Contoh berikut didasarkan pada model Sekolah dan memperlihatkan elemen InsertFunction yang digunakan untuk memetakan fungsi penyisipan jenis entitas Orang ke prosedur tersimpan InsertPerson. (Prosedur tersimpan InsertPerson ditunjukkan di bawah ini dan dinyatakan dalam model penyimpanan.) Elemen ResultBinding digunakan untuk memetakan nilai kolom yang dikembalikan oleh prosedur tersimpan (NewPersonID) ke properti jenis entitas (PersonID).

 <EntityTypeMapping TypeName="SchoolModel.Person">
   <ModificationFunctionMapping>
     <InsertFunction FunctionName="SchoolModel.Store.InsertPerson">
       <ScalarProperty Name="EnrollmentDate"
                       ParameterName="EnrollmentDate" />
       <ScalarProperty Name="HireDate" ParameterName="HireDate" />
       <ScalarProperty Name="FirstName" ParameterName="FirstName" />
       <ScalarProperty Name="LastName" ParameterName="LastName" />
       <ResultBinding Name="PersonID" ColumnName="NewPersonID" />
     </InsertFunction>
     <UpdateFunction FunctionName="SchoolModel.Store.UpdatePerson">
       <ScalarProperty Name="EnrollmentDate"
                       ParameterName="EnrollmentDate"
                       Version="Current" />
       <ScalarProperty Name="HireDate" ParameterName="HireDate"
                       Version="Current" />
       <ScalarProperty Name="FirstName" ParameterName="FirstName"
                       Version="Current" />
       <ScalarProperty Name="LastName" ParameterName="LastName"
                       Version="Current" />
       <ScalarProperty Name="PersonID" ParameterName="PersonID"
                       Version="Current" />
     </UpdateFunction>
     <DeleteFunction FunctionName="SchoolModel.Store.DeletePerson">
       <ScalarProperty Name="PersonID" ParameterName="PersonID" />
     </DeleteFunction>
   </ModificationFunctionMapping>
 </EntityTypeMapping>

Transact-SQL berikut ini menjelaskan prosedur tersimpan InsertPerson :

 CREATE PROCEDURE [dbo].[InsertPerson]
                                @LastName nvarchar(50),
                                @FirstName nvarchar(50),
                                @HireDate datetime,
                                @EnrollmentDate datetime
                                AS
                                INSERT INTO dbo.Person (LastName,
                                                                             FirstName,
                                                                             HireDate,
                                                                             EnrollmentDate)
                                VALUES (@LastName,
                                               @FirstName,
                                               @HireDate,
                                               @EnrollmentDate);
                                SELECT SCOPE_IDENTITY() as NewPersonID;

Elemen ResultMapping (MSL)

Elemen ResultMapping dalam pemetaan bahasa spesifikasi (MSL) mendefinisikan pemetaan antara impor fungsi dalam model konseptual dan prosedur tersimpan dalam database yang mendasar ketika berikut ini benar:

  • Impor fungsi mengembalikan jenis entitas model konseptual atau jenis kompleks.
  • Nama kolom yang dikembalikan oleh prosedur tersimpan tidak sama persis dengan nama properti pada jenis entitas atau jenis kompleks.

Secara default, pemetaan antara kolom yang dikembalikan oleh prosedur tersimpan dan jenis entitas atau jenis kompleks didasarkan pada nama kolom dan properti. Jika nama kolom tidak sama persis dengan nama properti, Anda harus menggunakan elemen ResultMapping untuk menentukan pemetaan. Untuk contoh pemetaan default, lihat FunctionImportMapping Element (MSL).

Elemen ResultMapping adalah elemen turunan dari elemen FunctionImportMapping.

Elemen ResultMapping dapat memiliki elemen turunan berikut:

  • EntityTypeMapping (nol atau lebih)
  • ComplexTypeMapping

Tidak ada atribut yang berlaku untuk Elemen ResultMapping .

Contoh

Pertimbangkan prosedur tersimpan berikut:

 CREATE PROCEDURE [dbo].[GetGrades]
             @student_Id int
             AS
             SELECT     EnrollmentID as enroll_id,
                                                                             Grade as grade,
                                                                             CourseID as course_id,
                                                                             StudentID as student_id
                                               FROM dbo.StudentGrade
             WHERE StudentID = @student_Id

Pertimbangkan juga jenis entitas model konseptual berikut:

 <EntityType Name="StudentGrade">
   <Key>
     <PropertyRef Name="EnrollmentID" />
   </Key>
   <Property Name="EnrollmentID" Type="Int32" Nullable="false"
             annotation:StoreGeneratedPattern="Identity" />
   <Property Name="CourseID" Type="Int32" Nullable="false" />
   <Property Name="StudentID" Type="Int32" Nullable="false" />
   <Property Name="Grade" Type="Decimal" Precision="3" Scale="2" />
 </EntityType>

Untuk membuat impor fungsi yang mengembalikan instans jenis entitas sebelumnya, pemetaan antara kolom yang dikembalikan oleh prosedur tersimpan dan jenis entitas harus ditentukan dalam elemen ResultMapping :

 <FunctionImportMapping FunctionImportName="GetGrades"
                        FunctionName="SchoolModel.Store.GetGrades" >
   <ResultMapping>
     <EntityTypeMapping TypeName="SchoolModel.StudentGrade">
       <ScalarProperty Name="EnrollmentID" ColumnName="enroll_id"/>
       <ScalarProperty Name="CourseID" ColumnName="course_id"/>
       <ScalarProperty Name="StudentID" ColumnName="student_id"/>
       <ScalarProperty Name="Grade" ColumnName="grade"/>
     </EntityTypeMapping>
   </ResultMapping>
 </FunctionImportMapping>

Elemen ScalarProperty (MSL)

Elemen ScalarProperty dalam pemetaan bahasa spesifikasi (MSL) memetakan properti pada jenis entitas model konseptual, jenis kompleks, atau asosiasi ke kolom tabel atau parameter prosedur tersimpan dalam database yang mendasarinya.

Catatan

Prosedur tersimpan tempat fungsi modifikasi dipetakan harus dideklarasikan dalam model penyimpanan. Untuk informasi selengkapnya, lihat Elemen Fungsi (SSDL).

Elemen ScalarProperty dapat menjadi turunan dari elemen berikut:

  • PemetaanFragment
  • InsertFunction
  • UpdateFunction
  • DeleteFunction
  • EndProperty
  • ComplexProperty
  • ResultMapping

Sebagai anak dari elemen MappingFragment, ComplexProperty, atau EndProperty , elemen ScalarProperty memetakan properti dalam model konseptual ke kolom dalam database. Sebagai turunan dari elemen InsertFunction, UpdateFunction, atau DeleteFunction , elemen ScalarProperty memetakan properti dalam model konseptual ke parameter prosedur tersimpan.

Elemen ScalarProperty tidak dapat memiliki elemen turunan.

Atribut yang Berlaku

Atribut yang berlaku untuk elemen ScalarProperty berbeda tergantung pada peran elemen .

Tabel berikut menjelaskan atribut yang berlaku saat elemen ScalarProperty digunakan untuk memetakan properti model konseptual ke kolom dalam database:

Nama Atribut Diperlukan Nilai
Nama Ya Nama properti model konseptual yang sedang dipetakan.
ColumnName Ya Nama kolom tabel yang sedang dipetakan.

Tabel berikut menjelaskan atribut yang berlaku untuk elemen ScalarProperty saat digunakan untuk memetakan properti model konseptual ke parameter prosedur tersimpan:

Nama Atribut Diperlukan Nilai
Nama Ya Nama properti model konseptual yang sedang dipetakan.
ParameterName Ya Nama parameter yang sedang dipetakan.
Version Tidak Saat ini atau Asli tergantung pada apakah nilai saat ini atau nilai asli properti harus digunakan untuk pemeriksaan konkurensi.

Contoh

Contoh berikut menunjukkan elemen ScalarProperty yang digunakan dalam dua cara:

  • Untuk memetakan properti jenis entitas Orang ke kolom tabel Orang.
  • Untuk memetakan properti jenis entitas Orang ke parameter prosedur tersimpan UpdatePerson . Prosedur tersimpan dideklarasikan dalam model penyimpanan.
 <EntitySetMapping Name="People">
   <EntityTypeMapping TypeName="SchoolModel.Person">
     <MappingFragment StoreEntitySet="Person">
       <ScalarProperty Name="PersonID" ColumnName="PersonID" />
       <ScalarProperty Name="LastName" ColumnName="LastName" />
       <ScalarProperty Name="FirstName" ColumnName="FirstName" />
       <ScalarProperty Name="HireDate" ColumnName="HireDate" />
       <ScalarProperty Name="EnrollmentDate"
                       ColumnName="EnrollmentDate" />
     </MappingFragment>
 </EntityTypeMapping>
   <EntityTypeMapping TypeName="SchoolModel.Person">
     <ModificationFunctionMapping>
       <InsertFunction FunctionName="SchoolModel.Store.InsertPerson">
         <ScalarProperty Name="EnrollmentDate"
                         ParameterName="EnrollmentDate" />
         <ScalarProperty Name="HireDate" ParameterName="HireDate" />
         <ScalarProperty Name="FirstName" ParameterName="FirstName" />
         <ScalarProperty Name="LastName" ParameterName="LastName" />
         <ResultBinding Name="PersonID" ColumnName="NewPersonID" />
       </InsertFunction>
       <UpdateFunction FunctionName="SchoolModel.Store.UpdatePerson">
         <ScalarProperty Name="EnrollmentDate"
                         ParameterName="EnrollmentDate"
                         Version="Current" />
         <ScalarProperty Name="HireDate" ParameterName="HireDate"
                         Version="Current" />
         <ScalarProperty Name="FirstName" ParameterName="FirstName"
                         Version="Current" />
         <ScalarProperty Name="LastName" ParameterName="LastName"
                         Version="Current" />
         <ScalarProperty Name="PersonID" ParameterName="PersonID"
                         Version="Current" />
       </UpdateFunction>
       <DeleteFunction FunctionName="SchoolModel.Store.DeletePerson">
         <ScalarProperty Name="PersonID" ParameterName="PersonID" />
       </DeleteFunction>
     </ModificationFunctionMapping>
   </EntityTypeMapping>
 </EntitySetMapping>

Contoh

Contoh berikutnya menunjukkan elemen ScalarProperty yang digunakan untuk memetakan fungsi sisipkan dan hapus dari asosiasi model konseptual ke prosedur tersimpan dalam database. Prosedur tersimpan dideklarasikan dalam model penyimpanan.

 <AssociationSetMapping Name="CourseInstructor"
                        TypeName="SchoolModel.CourseInstructor"
                        StoreEntitySet="CourseInstructor">
   <EndProperty Name="Person">
     <ScalarProperty Name="PersonID" ColumnName="PersonID" />
   </EndProperty>
   <EndProperty Name="Course">
     <ScalarProperty Name="CourseID" ColumnName="CourseID" />
   </EndProperty>
   <ModificationFunctionMapping>
     <InsertFunction FunctionName="SchoolModel.Store.InsertCourseInstructor" >   
       <EndProperty Name="Course">
         <ScalarProperty Name="CourseID" ParameterName="courseId"/>
       </EndProperty>
       <EndProperty Name="Person">
         <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
       </EndProperty>
     </InsertFunction>
     <DeleteFunction FunctionName="SchoolModel.Store.DeleteCourseInstructor">
       <EndProperty Name="Course">
         <ScalarProperty Name="CourseID" ParameterName="courseId"/>
       </EndProperty>
       <EndProperty Name="Person">
         <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
       </EndProperty>
     </DeleteFunction>
   </ModificationFunctionMapping>
 </AssociationSetMapping>

Elemen UpdateFunction (MSL)

Elemen UpdateFunction dalam pemetaan bahasa spesifikasi (MSL) memetakan fungsi pembaruan jenis entitas dalam model konseptual ke prosedur tersimpan dalam database yang mendasar. Prosedur tersimpan tempat fungsi modifikasi dipetakan harus dideklarasikan dalam model penyimpanan. Untuk informasi selengkapnya, lihat Elemen Fungsi (SSDL).

Catatan

Jika Anda tidak memetakan ketiga operasi sisipkan, perbarui, atau hapus jenis entitas ke prosedur tersimpan, operasi yang tidak dipetakan akan gagal jika dijalankan saat runtime dan UpdateException dilemparkan.

Elemen UpdateFunction dapat menjadi turunan dari elemen ModificationFunctionMapping dan diterapkan ke elemen EntityTypeMapping.

Elemen UpdateFunction dapat memiliki elemen turunan berikut:

  • AssociationEnd (nol atau lebih)
  • ComplexProperty (nol atau lebih)
  • ResultBinding (nol atau satu)
  • ScalarProperty (nol atau lebih)

Atribut yang Berlaku

Tabel berikut ini menjelaskan atribut yang dapat diterapkan ke elemen UpdateFunction .

Nama Atribut Diperlukan Nilai
FunctionName Ya Nama prosedur tersimpan yang memenuhi syarat namespace layanan tempat fungsi pembaruan dipetakan. Prosedur tersimpan harus dideklarasikan dalam model penyimpanan.
RowsAffectedParameter Tidak Nama parameter output yang mengembalikan jumlah baris yang terpengaruh.

Contoh

Contoh berikut didasarkan pada model Sekolah dan menunjukkan elemen UpdateFunction yang digunakan untuk memetakan fungsi pembaruan jenis entitas Orang ke prosedur tersimpan UpdatePerson. Prosedur tersimpan UpdatePerson dinyatakan dalam model penyimpanan.

 <EntityTypeMapping TypeName="SchoolModel.Person">
   <ModificationFunctionMapping>
     <InsertFunction FunctionName="SchoolModel.Store.InsertPerson">
       <ScalarProperty Name="EnrollmentDate"
                       ParameterName="EnrollmentDate" />
       <ScalarProperty Name="HireDate" ParameterName="HireDate" />
       <ScalarProperty Name="FirstName" ParameterName="FirstName" />
       <ScalarProperty Name="LastName" ParameterName="LastName" />
       <ResultBinding Name="PersonID" ColumnName="NewPersonID" />
     </InsertFunction>
     <UpdateFunction FunctionName="SchoolModel.Store.UpdatePerson">
       <ScalarProperty Name="EnrollmentDate"
                       ParameterName="EnrollmentDate"
                       Version="Current" />
       <ScalarProperty Name="HireDate" ParameterName="HireDate"
                       Version="Current" />
       <ScalarProperty Name="FirstName" ParameterName="FirstName"
                       Version="Current" />
       <ScalarProperty Name="LastName" ParameterName="LastName"
                       Version="Current" />
       <ScalarProperty Name="PersonID" ParameterName="PersonID"
                       Version="Current" />
     </UpdateFunction>
     <DeleteFunction FunctionName="SchoolModel.Store.DeletePerson">
       <ScalarProperty Name="PersonID" ParameterName="PersonID" />
     </DeleteFunction>
   </ModificationFunctionMapping>
 </EntityTypeMapping>