Specifikace MSL
Poznámka:
MSL v1 není podporováno, aktualizujte prosím na verzi 3.
Jazyk MSL (Mapping Specification Language) je jazyk založený na jazyce XML, který popisuje mapování mezi koncepčním modelem a modelem úložiště aplikace Entity Framework.
V aplikaci Entity Framework se v době sestavení načtou metadata mapování ze souboru .msl (napsaného v MSL). Entity Framework používá k překladu dotazů na konceptuální model k ukládání příkazů specifických pro konkrétní příkazy mapování za běhu.
Návrhář Entity Framework (EF Designer) ukládá informace o mapování v souboru .edmx v době návrhu. Návrhář entity v době sestavení používá informace v souboru .edmx k vytvoření souboru .msl, který vyžaduje Entity Framework za běhu.
Názvy všech koncepčních typů modelů nebo modelů úložiště, na které odkazuje knihovna MSL, musí být kvalifikované příslušnými názvy oborů názvů. Informace o názvu konceptuálního oboru názvů modelu naleznete ve specifikaci CSDL. Informace o názvu oboru názvů modelu úložiště najdete v tématu Specifikace SSDL.
Verze MSL jsou diferencovány obory názvů XML.
Verze MSL | Obor názvů XML |
---|---|
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 |
Alias – element (MSL)
Element Alias v jazyce specifikace mapování (MSL) je podřízený element Mapping, který slouží k definování aliasů pro konceptuální model a obory názvů modelu úložiště. Názvy všech koncepčních typů modelů nebo modelů úložiště, na které odkazuje knihovna MSL, musí být kvalifikované příslušnými názvy oborů názvů. Informace o názvu konceptuálního oboru názvů modelu naleznete v tématu Element schématu (CSDL). Informace o názvu oboru názvů modelu úložiště naleznete v tématu Element schématu (SSDL).
Element Alias nemůže obsahovat podřízené prvky.
Použitelné atributy
Následující tabulka popisuje atributy, které lze použít u elementu Alias .
Název atributu | Je povinné | Hodnota |
---|---|---|
Klíč | Ano | Alias oboru názvů, který je určen atributem Value . |
Hodnota | Ano | Obor názvů, pro který je hodnota prvku Key alias. |
Příklad
Následující příklad ukazuje element Alias , který definuje alias , c
pro typy, které jsou definovány v konceptuální model.
<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>
AssociationEnd – element (MSL)
Element AssociationEnd v jazyce specifikace mapování (MSL) se používá, když se funkce úprav typu entity v koncepčním modelu mapují na uložené procedury v podkladové databázi. Pokud upravená uložená procedura přebírá parametr, jehož hodnota je uložena ve vlastnosti přidružení, Element AssociationEnd mapuje hodnotu vlastnosti na parametr. Další informace naleznete v níže uvedeném příkladu.
Další informace o mapování funkcí úprav typů entit na uložené procedury naleznete v tématu ModificationFunctionMapping Element (MSL) a Návod: Mapování entity na uložené procedury.
Element AssociationEnd může mít následující podřízené elementy:
- Skalárníproperty
Použitelné atributy
Následující tabulka popisuje atributy, které jsou použitelné pro AssociationEnd element.
Název atributu | Je povinné | Hodnota |
---|---|---|
Sada přidružení | Ano | Název namapovaného přidružení. |
Od | Ano | Hodnota FromRole atributu navigace, která odpovídá přidružení mapované. Další informace naleznete v tématu NavigationProperty – element (CSDL). |
Na | Ano | Hodnota ToRole atributu navigační vlastnosti, která odpovídá přidružování mapované. Další informace naleznete v tématu NavigationProperty – element (CSDL). |
Příklad
Zvažte následující koncepční typ entity modelu:
<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>
Zvažte také následující uloženou proceduru:
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;
Chcete-li namapovat funkci Course
aktualizace entity na tuto uloženou proceduru, musíte zadat hodnotu parametru DepartmentID . Hodnota DepartmentID
pro typ entity neodpovídá vlastnosti; je obsažena v nezávislém přidružení, jehož mapování je znázorněno zde:
<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>
Následující kód ukazuje element AssociationEnd použitý k mapování vlastnosti DepartmentID FK_Course_Department přidružení k uložené procedurě UpdateCourse (ke které je mapována funkce aktualizace typu entity Course):
<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>
AssociationSetMapping – element (MSL)
Element AssociationSetMapping v jazyce specifikace mapování (MSL) definuje mapování mezi přidružením v koncepčním modelu a sloupci tabulky v podkladové databázi.
Přidružení v koncepčním modelu jsou typy, jejichž vlastnosti představují sloupce primárního a cizího klíče v podkladové databázi. AssociationSetMapping element používá dva EndProperty elementy definovat mapování mezi vlastnostmi typu přidružení a sloupci v databázi. Na tato mapování můžete umístit podmínky pomocí elementu Condition. Namapujte funkce vložení, aktualizace a odstranění pro přidružení k uloženým procedurám v databázi pomocí elementu ModificationFunctionMapping. Definujte mapování jen pro čtení mezi přidruženími a sloupci tabulky pomocí řetězce Entity SQL v elementu QueryView.
Poznámka:
Pokud je pro přidružení v koncepčním modelu definováno referenční omezení, přidružení nemusí být mapováno s elementem AssociationSetMapping . Pokud je pro přidružení, které má referenční omezení, existuje AssociationSetMapping element, mapování definované v AssociationSetMapping elementu bude ignorováno. Další informace naleznete v tématu ReferentialConstraint – element (CSDL).
Element AssociationSetMapping může mít následující podřízené elementy.
- QueryView (nula nebo jedna)
- EndProperty (nula nebo dvě)
- Podmínka (nula nebo více)
- ModificationFunctionMapping (nula nebo jedna)
Použitelné atributy
Následující tabulka popisuje atributy, které lze použít pro AssociationSetMapping element.
Název atributu | Je povinné | Hodnota |
---|---|---|
Název | Ano | Název sady přidružení konceptu modelu, která se mapuje. |
TypeName | No | Kvalifikovaný název oboru názvů typ přidružení konceptu modelu, který se mapuje. |
StoreEntitySet | No | Název mapované tabulky. |
Příklad
Následující příklad ukazuje AssociationSetMapping element, ve kterém je FK_Course_Department asociace nastavena v koncepčním modelu mapována na tabulku Course v databázi. Mapování mezi vlastnostmi typu přidružení a sloupci tabulky jsou zadána v podřízených elementech EndProperty .
<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>
ComplexProperty – element (MSL)
Element ComplexProperty v jazyce specifikace mapování (MSL) definuje mapování mezi komplexní typ vlastnosti pro koncepční typ entity modelu a sloupce tabulky v podkladové databázi. Mapování sloupců vlastností jsou zadány v podřízených elementech ScalarProperty.
Element ComplexType vlastnost může mít následující podřízené elementy:
- SkalarProperty (nula nebo více)
- ComplexProperty (nula nebo více)
- ComplexTypeMapping (nula nebo více)
- Podmínka (nula nebo více)
Použitelné atributy
Následující tabulka popisuje atributy, které jsou použitelné pro ComplexProperty element:
Název atributu | Je povinné | Hodnota |
---|---|---|
Název | Ano | Název komplexní vlastnosti typu entity v konceptuálním modelu, který se mapuje. |
TypeName | No | Název konceptuální vlastnosti modelu s kvalifikovaným oborem názvů. |
Příklad
Následující příklad vychází ze školního modelu. Do konceptuálního modelu jsme přidali následující komplexní typ:
<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>
Vlastnosti LastName a FirstName typu entity Person byly nahrazeny jednou komplexní vlastností Name:
<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>
Následující knihovna MSL ukazuje element ComplexProperty použitý k mapování vlastnosti Name na sloupce v podkladové databázi:
<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>
ComplexTypeMapping – element (MSL)
Element ComplexTypeMapping v jazyce specifikace mapování (MSL) je podřízeným prvkem ResultMapping a definuje mapování mezi importem funkce v koncepčním modelu a uloženou procedurou v podkladové databázi, pokud jsou splněny následující podmínky:
- Import funkce vrátí koncepční komplexní typ.
- Názvy sloupců vrácených uloženou procedurou přesně neodpovídají názvům vlastností v komplexním typu.
Ve výchozím nastavení je mapování mezi sloupci vrácenými uloženou procedurou a komplexním typem založeno na názvech sloupců a vlastností. Pokud názvy sloupců přesně neodpovídají názvům vlastností, musíte k definování mapování použít element ComplexTypeMapping . Příklad výchozího mapování naleznete v tématu FunctionImportMapping – element (MSL).
Element ComplexTypeMapping může mít následující podřízené prvky:
- SkalarProperty (nula nebo více)
Použitelné atributy
Následující tabulka popisuje atributy, které jsou použitelné pro ComplexTypeMapping element.
Název atributu | Je povinné | Hodnota |
---|---|---|
TypeName | Ano | Kvalifikovaný název oboru názvů komplexního typu, který se mapuje. |
Příklad
Vezměte v úvahu následující uloženou proceduru:
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
Zvažte také následující komplexní typ konceptuálního modelu:
<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>
Aby bylo možné vytvořit import funkce, která vrací instance předchozího komplexního typu, musí být mapování mezi sloupci vrácenými uloženou procedurou a typem entity definováno v elementu 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>
Element podmínky (MSL)
Element Condition v jazyce specifikace mapování (MSL) umístí podmínky na mapování mezi koncepčním modelem a podkladovou databází. Mapování definované v uzlu XML je platné, pokud jsou splněny všechny podmínky zadané v podřízených elementech podmínky . V opačném případě mapování není platné. Pokud například element MappingFragment obsahuje jeden nebo více podřízených elementů podmínky , mapování definované v uzlu MappingFragment bude platné pouze v případě, že jsou splněny všechny podmínky podřízených elementů podmínky .
Každá podmínka se může použít na název (název konceptuální vlastnosti entity modelu určené atributem Name ) nebo columnName (název sloupce v databázi určený atributem ColumnName ). Při nastavení atributu Name je podmínka kontrolována vůči hodnotě vlastnosti entity. Pokud je nastaven atribut ColumnName, podmínka je zkontrolována na hodnotu sloupce. V elementu Condition lze zadat pouze jeden atribut Name nebo ColumnName.
Poznámka:
Pokud je element Condition použit v rámci FunctionImportMapping elementu, pouze Name atribut není použitelný.
Element Condition může být podřízený z následujících prvků:
- AssociationSetMapping
- ComplexProperty
- EntitySetMapping
- MappingFragment
- EntityTypeMapping
Element Condition nemůže obsahovat žádné podřízené prvky.
Použitelné atributy
Následující tabulka popisuje atributy, které se vztahují k elementu Condition :
Název atributu | Je povinné | Hodnota |
---|---|---|
ColumnName | No | Název sloupce tabulky, jehož hodnota se používá k vyhodnocení podmínky. |
IsNull | No | Pravda nebo Nepravda. Pokud je hodnota True a hodnota sloupce má hodnotu null nebo pokud je hodnota Nepravda a hodnota sloupce není null, podmínka je pravdivá. V opačném případě je podmínka false. Atributy IsNull a Value nelze použít současně. |
Hodnota | No | Hodnota, se kterou je hodnota sloupce porovnána. Pokud jsou hodnoty stejné, podmínka je pravdivá. V opačném případě je podmínka false. Atributy IsNull a Value nelze použít současně. |
Název | No | Název konceptuální vlastnosti entity modelu, jejíž hodnota se používá k vyhodnocení podmínky. Tento atribut není použitelný, pokud je element Condition použit v elementu FunctionImportMapping. |
Příklad
Následující příklad ukazuje elementy podmínky jako podřízené elementy MappingFragment elementy. Pokud HireDate není null a EnrollmentDate má hodnotu null, data se mapují mezi typem SchoolModel.Instructor a sloupci PersonID a HireDate v tabulce Person. Pokud EnrollmentDate není null a HireDate má hodnotu null, data se mapují mezi typem SchoolModel.Student a sloupci PersonID a Enrollment v tabulce Person.
<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>
DeleteFunction – element (MSL)
Element DeleteFunction v jazyce specifikace mapování (MSL) mapuje funkci delete typu entity nebo přidružení v koncepčním modelu na uloženou proceduru v podkladové databázi. Uložené procedury, na které se mapují funkce úprav, musí být deklarovány v modelu úložiště. Další informace najdete v tématu Element funkce (SSDL).
Poznámka:
Pokud nemapujete všechny tři operace vložení, aktualizace nebo odstranění typu entity na uložené procedury, nemapované operace selžou, pokud se spustí za běhu a vyvolá se výjimka UpdateException.
DeleteFunction Applied to EntityTypeMapping
Při použití entityTypeMapping Element DeleteFunction element mapuje funkci delete typu entity v konceptuální model na uloženou proceduru.
DeleteFunction element může mít následující podřízené elementy při použití EntityTypeMapping elementu:
- AssociationEnd (nula nebo více)
- ComplexProperty (nula nebo více)
- SkalarProperty (nula nebo více)
Použitelné atributy
Následující tabulka popisuje atributy, které lze použít na DeleteFunction element při použití EntityTypeMapping elementu.
Název atributu | Je povinné | Hodnota |
---|---|---|
FunctionName | Ano | Kvalifikovaný název oboru názvů uložené procedury, na kterou je namapovaná funkce delete. Uložená procedura musí být deklarována v modelu úložiště. |
RowsAffectedParameter | No | Název výstupního parametru, který vrátí počet ovlivněných řádků. |
Příklad
Následující příklad je založen na školním modelu a ukazuje DeleteFunction element mapování funkce delete typu entity Person na DeletePerson uložená procedura. Uložená procedura DeletePerson je deklarována v modelu úložiště.
<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 Applied to AssociationSetMapping
Při použití na AssociationSetMapping element, DeleteFunction element mapuje funkci delete přidružení v koncepčním modelu na uloženou proceduru.
DeleteFunction element může mít následující podřízené elementy při použití AssociationSetMapping element:
- EndProperty
Použitelné atributy
Následující tabulka popisuje atributy, které lze použít na DeleteFunction element při použití na AssociationSetMapping elementu.
Název atributu | Je povinné | Hodnota |
---|---|---|
FunctionName | Ano | Kvalifikovaný název oboru názvů uložené procedury, na kterou je namapovaná funkce delete. Uložená procedura musí být deklarována v modelu úložiště. |
RowsAffectedParameter | No | Název výstupního parametru, který vrátí počet ovlivněných řádků. |
Příklad
Následující příklad je založen na školním modelu a ukazuje DeleteFunction element použitý k mapování funkce delete CourseInstructor přidružení DeleteCourseInstructor uložená procedura. Uložená procedura DeleteCourseInstructor je deklarována v modelu úložiště.
<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>
EndProperty – element (MSL)
Element EndProperty v jazyce specifikace mapování (MSL) definuje mapování mezi koncem nebo modifikační funkcí koncepčního modelu přidružení a podkladovou databází. Mapování property-column je zadáno v podřízené ScalarProperty elementu.
Když EndProperty element je použit k definování mapování pro konec konceptu modelu přidružení, je to podřízený AssociationSetMapping elementu. Když EndProperty element je použit k definování mapování pro úpravu funkce konceptu modelu přidružení, je to podřízený InsertFunction element nebo DeleteFunction element.
EndProperty element může mít následující podřízené elementy :
- SkalarProperty (nula nebo více)
Použitelné atributy
Následující tabulka popisuje atributy, které jsou použitelné pro EndProperty element:
Název atributu | Je povinné | Hodnota |
---|---|---|
Name | Ano | Název konce přidružení, který se mapuje. |
Příklad
Následující příklad ukazuje AssociationSetMapping element, ve kterém je přidružení FK_Course_Department v konceptu modelu mapováno na tabulku Course v databázi. Mapování mezi vlastnostmi typu přidružení a sloupci tabulky jsou zadána v podřízených elementech EndProperty .
<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>
Příklad
Následující příklad ukazuje EndProperty element mapování insert a delete funkce asociace (CourseInstructor) na uložené procedury v podkladové databázi. Funkce, které jsou namapované na, jsou deklarovány v modelu úložiště.
<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)
Element EntityContainerMapping v jazyce specifikace mapování (MSL) mapuje kontejner entit v koncepčním modelu na kontejner entit v modelu úložiště. EntityContainerMapping element je podřízený element Mapping.
Element EntityContainerMapping může mít následující podřízené prvky (v uvedeném pořadí):
- EntitySetMapping (nula nebo více)
- AssociationSetMapping (nula nebo více)
- FunctionImportMapping (nula nebo více)
Použitelné atributy
Následující tabulka popisuje atributy, které lze použít pro EntityContainerMapping element.
Název atributu | Je povinné | Hodnota |
---|---|---|
StorageModelContainer | Ano | Název kontejneru entit modelu úložiště, který se mapuje. |
CdmEntityContainer | Ano | Název kontejneru entit konceptu modelu, který se mapuje. |
GenerateUpdateViews | No | Pravda nebo Nepravda. Pokud je false, nevygenerují se žádná zobrazení aktualizací. Tento atribut by měl být nastaven na False , pokud máte mapování jen pro čtení, které by bylo neplatné, protože data nemusí být úspěšně dokončena. Výchozí hodnota je True. |
Příklad
Následující příklad ukazuje element EntityContainerMapping , který mapuje kontejner SchoolModelEntities (kontejner entity konceptu modelu) na kontejner SchoolModelStoreContainer (kontejner entity modelu úložiště):
<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>
Element EntitySetMapping (MSL)
Element EntitySetMapping v jazyce specifikace mapování (MSL) mapuje všechny typy v konceptuální entitě modelu nastavené na sady entit v modelu úložiště. Entita nastavená v konceptuálním modelu je logický kontejner pro instance entit stejného typu (a odvozených typů). Entita nastavená v modelu úložiště představuje tabulku nebo zobrazení v podkladové databázi. Koncepční sada entit modelu je určena hodnotou Name atributu EntitySetMapping elementu. Vlastnost mapped-to table nebo view je určena atributem StoreEntitySet v každém podřízené Element MappingFragment nebo v samotném elementu EntitySetMapping .
Element EntitySetMapping může mít následující podřízené prvky:
- EntityTypeMapping (nula nebo více)
- QueryView (nula nebo jedna)
- MappingFragment (nula nebo více)
Použitelné atributy
Následující tabulka popisuje atributy, které lze použít u elementu EntitySetMapping .
Název atributu | Je povinné | Hodnota |
---|---|---|
Název | Ano | Název sady entit konceptu modelu, která se mapuje. |
TypeName 1 | No | Název namapovaného typu entity konceptu modelu. |
StoreEntitySet 1 | No | Název sady entit modelu úložiště, na kterou se mapuje. |
MakeColumnsDistinct | No | Pravda nebo Nepravda v závislosti na tom, zda jsou vráceny pouze odlišné řádky. Pokud je tento atribut nastaven na True, GenerateUpdateViews atribut EntityContainerMapping element musí být nastaven na False. |
1 Atributy TypeName a StoreEntitySet lze použít místo podřízených elementů EntityTypeMapping a MappingFragment k mapování jednoho typu entity na jednu tabulku.
Příklad
Následující příklad ukazuje Element EntitySetMapping , který mapuje tři typy (základní typ a dva odvozené typy) v sadě entit Courses konceptu modelu na tři různé tabulky v podkladové databázi. Tabulky jsou určeny StoreEntitySet atribut v každém MappingFragment elementu.
<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>
EntityTypeMapping – element (MSL)
Element EntityTypeMapping v jazyce specifikace mapování (MSL) definuje mapování mezi typem entity v koncepčním modelu a tabulkách nebo zobrazeních v podkladové databázi. Informace o koncepčních typech entit modelu a podkladových databázových tabulkách nebo zobrazeních naleznete v tématu EntityType – element (CSDL) a Element EntitySet (SSDL). Koncepční typ entity modelu, který se mapuje, je určen atributem TypeName elementu EntityTypeMapping . Tabulka nebo zobrazení mapované je určena StoreEntitySet atributu child MappingFragment elementu.
Podřízený element ModificationFunctionMapping lze použít k mapování funkcí vložení, aktualizace nebo odstranění typů entit na uložené procedury v databázi.
Element EntityTypeMapping může mít následující podřízené prvky:
- MappingFragment (nula nebo více)
- ModificationFunctionMapping (nula nebo jedna)
- Skalárníproperty
- Podmínka
Poznámka:
Elementy MappingFragment a ModificationFunctionMapping nemohou být podřízenými elementy EntityTypeMapping současně.
Poznámka:
SkalarProperty a Condition elementy mohou být pouze podřízené elementy EntityTypeMapping elementu při použití v rámci FunctionImportMapping elementu.
Použitelné atributy
Následující tabulka popisuje atributy, které lze použít pro EntityTypeMapping element.
Název atributu | Je povinné | Hodnota |
---|---|---|
TypeName | Ano | Název entity konceptuálního modelu, který se mapuje, je kvalifikovaný název oboru názvů. Pokud je typ abstraktní nebo odvozený typ, musí být IsOfType(Namespace-qualified_type_name) hodnota . |
Příklad
Následující příklad ukazuje EntitySetMapping element se dvěma podřízenými Elementy EntityTypeMapping . V prvním Prvku EntityTypeMapping je typ entity SchoolModel.Person mapován na tabulku Person. Ve druhém prvku EntityTypeMapping je funkce aktualizace typu SchoolModel.Person mapována na uloženou proceduru UpdatePerson v databázi.
<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>
Příklad
Následující příklad ukazuje mapování hierarchie typů, ve které je kořenový typ abstraktní. Všimněte si použití IsOfType
syntaxe pro atributy 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)
Element FunctionImportMapping v jazyce specifikace mapování (MSL) definuje mapování mezi importem funkce v koncepčním modelu a uloženou procedurou nebo funkcí v podkladové databázi. Importy funkcí musí být deklarovány v koncepčním modelu a uložené procedury musí být deklarovány v modelu úložiště. Další informace naleznete v tématu FunctionImport – element (CSDL) a element funkce (SSDL).
Poznámka:
Pokud import funkce ve výchozím nastavení vrátí koncepční typ entity modelu nebo komplexní typ, musí názvy sloupců vrácených podkladovou uloženou procedurou přesně odpovídat názvům vlastností konceptuálního typu modelu. Pokud názvy sloupců přesně neodpovídají názvům vlastností, musí být mapování definováno v elementu ResultMapping.
Element FunctionImportMapping může mít následující podřízené prvky:
- ResultMapping (nula nebo více)
Použitelné atributy
Následující tabulka popisuje atributy, které se vztahují k elementu FunctionImportMapping :
Název atributu | Je povinné | Hodnota |
---|---|---|
FunctionImportName | Ano | Název importu funkce v konceptuálním modelu, který se mapuje. |
FunctionName | Ano | Kvalifikovaný název funkce v modelu úložiště, který se mapuje. |
Příklad
Následující příklad vychází ze školního modelu. V modelu úložiště zvažte následující funkci:
<Function Name="GetStudentGrades" Aggregate="false"
BuiltIn="false" NiladicFunction="false"
IsComposable="false" ParameterTypeSemantics="AllowImplicitConversion"
Schema="dbo">
<Parameter Name="StudentID" Type="int" Mode="In" />
</Function>
Zvažte také import této funkce v koncepčním modelu:
<FunctionImport Name="GetStudentGrades" EntitySet="StudentGrades"
ReturnType="Collection(SchoolModel.StudentGrade)">
<Parameter Name="StudentID" Mode="In" Type="Int32" />
</FunctionImport>
Následující příklad ukazuje element FunctionImportMapping , který se používá k namapování funkce a funkce importu výše na sebe:
<FunctionImportMapping FunctionImportName="GetStudentGrades"
FunctionName="SchoolModel.Store.GetStudentGrades" />
InsertFunction – element (MSL)
Element InsertFunction v jazyce specifikace mapování (MSL) mapuje funkci vložení typu entity nebo přidružení v koncepčním modelu na uloženou proceduru v podkladové databázi. Uložené procedury, na které se mapují funkce úprav, musí být deklarovány v modelu úložiště. Další informace najdete v tématu Element funkce (SSDL).
Poznámka:
Pokud nemapujete všechny tři operace vložení, aktualizace nebo odstranění typu entity na uložené procedury, nemapované operace selžou, pokud se spustí za běhu a vyvolá se výjimka UpdateException.
InsertFunction element může být podřízený Element ModificationFunctionMapping elementu a použitý u EntityTypeMapping elementu nebo AssociationSetMapping elementu.
InsertFunction Applied to EntityTypeMapping
Při použití entityTypeMapping Element InsertFunction element mapuje funkci insert typu entity v konceptuální model na uloženou proceduru.
Element InsertFunction může mít následující podřízené elementy při použití EntityTypeMapping elementu:
- AssociationEnd (nula nebo více)
- ComplexProperty (nula nebo více)
- ResultBinding (nula nebo jedna)
- SkalarProperty (nula nebo více)
Použitelné atributy
Následující tabulka popisuje atributy, které lze použít na InsertFunction element při použití EntityTypeMapping elementu.
Název atributu | Je povinné | Hodnota |
---|---|---|
FunctionName | Ano | Název uložené procedury, na kterou je namapovaná funkce vložení, je kvalifikovaný název oboru názvů. Uložená procedura musí být deklarována v modelu úložiště. |
RowsAffectedParameter | No | Název výstupního parametru, který vrátí počet ovlivněných řádků. |
Příklad
Následující příklad je založen na školním modelu a ukazuje InsertFunction element použitý k mapování funkce vložení typu Entity Person na InsertPerson uložená procedura. Uložená procedura InsertPerson je deklarována v modelu úložiště.
<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 Applied to AssociationSetMapping
Při použití na AssociationSetMapping elementu InsertFunction element mapuje funkci insert přidružení v koncepčním modelu na uloženou proceduru.
Element InsertFunction může mít následující podřízené elementy při použití AssociationSetMapping elementu:
- EndProperty
Použitelné atributy
Následující tabulka popisuje atributy, které lze použít na InsertFunction element při použití na AssociationSetMapping elementu.
Název atributu | Je povinné | Hodnota |
---|---|---|
FunctionName | Ano | Název uložené procedury, na kterou je namapovaná funkce vložení, je kvalifikovaný název oboru názvů. Uložená procedura musí být deklarována v modelu úložiště. |
RowsAffectedParameter | No | Název výstupního parametru, který vrátí počet ovlivněných řádků. |
Příklad
Následující příklad je založen na školním modelu a ukazuje InsertFunction element použitý k mapování funkce Insert CourseInstructor asociace InsertCourseInstructor uložená procedura. Uložená procedura InsertCourseInstructor je deklarována v modelu úložiště.
<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>
Element mapping (MSL)
Element Mapping v jazyce MSL (Mapping Specification Language) obsahuje informace pro mapování objektů, které jsou definovány v koncepčním modelu na databázi (jak je popsáno v modelu úložiště). Další informace naleznete v tématu SPECIFIKACE CSDL a SPECIFIKACE SSDL.
Element Mapping je kořenový prvek pro specifikaci mapování. Obor názvů XML pro specifikace mapování je https://schemas.microsoft.com/ado/2009/11/mapping/cs
.
Element mapování může mít následující podřízené prvky (v uvedeném pořadí):
- Alias (nula nebo více)
- EntityContainerMapping (přesně jeden)
Názvy koncepčních typů a typů modelů úložiště, na které odkazuje MSL, musí být kvalifikované příslušnými názvy oborů názvů. Informace o názvu konceptuálního oboru názvů modelu naleznete v tématu Element schématu (CSDL). Informace o názvu oboru názvů modelu úložiště naleznete v tématu Element schématu (SSDL). Aliasy pro obory názvů používané v MSL lze definovat pomocí elementu Alias.
Použitelné atributy
Následující tabulka popisuje atributy, které lze použít u elementu Mapping .
Název atributu | Je povinné | Hodnota |
---|---|---|
Space | Ano | C-S. Jedná se o pevnou hodnotu a nelze ji změnit. |
Příklad
Následující příklad ukazuje element Mapping , který je založen na části modelu School. Další informace o školním modelu najdete v tématu Rychlý start (Entity Framework):
<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)
Element MappingFragment v jazyce specifikace mapování (MSL) definuje mapování mezi vlastnostmi konceptu typu entity modelu a tabulkou nebo zobrazením v databázi. Informace o koncepčních typech entit modelu a podkladových databázových tabulkách nebo zobrazeních naleznete v tématu EntityType – element (CSDL) a Element EntitySet (SSDL). MappingFragment může být podřízený prvek EntityTypeMapping elementu nebo EntitySetMapping elementu.
Element MappingFragment může mít následující podřízené prvky:
- ComplexType (nula nebo více)
- SkalarProperty (nula nebo více)
- Podmínka (nula nebo více)
Použitelné atributy
Následující tabulka popisuje atributy, které lze použít na MappingFragment elementu.
Název atributu | Je povinné | Hodnota |
---|---|---|
StoreEntitySet | Ano | Název tabulky nebo zobrazení, které se mapuje. |
MakeColumnsDistinct | No | Pravda nebo Nepravda v závislosti na tom, zda jsou vráceny pouze odlišné řádky. Pokud je tento atribut nastaven na True, GenerateUpdateViews atribut EntityContainerMapping element musí být nastaven na False. |
Příklad
Následující příklad ukazuje MappingFragment element jako podřízený EntityTypeMapping element. V tomto příkladu jsou vlastnosti typu Course v konceptuálním modelu mapovány na sloupce tabulky Course v databázi.
<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>
Příklad
Následující příklad ukazuje MappingFragment element jako podřízený EntitySetMapping elementu. Stejně jako v předchozím příkladu jsou vlastnosti typu Course v konceptuálním modelu mapovány na sloupce tabulky Course v databázi.
<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>
ModificationFunctionMapping – element (MSL)
Element ModificationFunctionMapping v jazyce specifikace mapování (MSL) mapuje funkce vložení, aktualizace a odstranění konceptu typu entity na uložené procedury v podkladové databázi. Element ModificationFunctionMapping může také mapovat funkce vložení a odstranění pro přidružení M:N v koncepčním modelu na uložené procedury v podkladové databázi. Uložené procedury, na které se mapují funkce úprav, musí být deklarovány v modelu úložiště. Další informace najdete v tématu Element funkce (SSDL).
Poznámka:
Pokud nemapujete všechny tři operace vložení, aktualizace nebo odstranění typu entity na uložené procedury, nemapované operace selžou, pokud se spustí za běhu a vyvolá se výjimka UpdateException.
Poznámka:
Pokud jsou funkce úprav pro jednu entitu v hierarchii dědičnosti mapovány na uložené procedury, je nutné namapovat funkce úprav pro všechny typy v hierarchii na uložené procedury.
Element ModificationFunctionMapping může být podřízený EntityTypeMapping elementu nebo AssociationSetMapping elementu.
Element ModificationFunctionMapping může mít následující podřízené prvky:
- DeleteFunction (nula nebo jedna)
- InsertFunction (nula nebo jedna)
- UpdateFunction (nula nebo jedna)
Pro element ModificationFunctionMapping nejsou použitelné žádné atributy.
Příklad
Následující příklad ukazuje mapování sady entit pro entitu People nastavenou ve školním modelu. Kromě mapování sloupců pro typ entity Person se zobrazí také mapování funkcí vložení, aktualizace a odstranění typu Osoba . Funkce, které jsou namapované na, jsou deklarovány v modelu úložiště.
<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>
Příklad
Následující příklad ukazuje mapování sady přidružení pro přidružení CourseInstructor nastaveno ve školním modelu. Kromě mapování sloupců pro přidružení CourseInstructor se zobrazí mapování funkcí vložení a odstranění přidružení CourseInstructor . Funkce, které jsou namapované na, jsou deklarovány v modelu úložiště.
<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>
QueryView – element (MSL)
Element QueryView v jazyce specifikace mapování (MSL) definuje mapování jen pro čtení mezi typem entity nebo přidružením v konceptuálním modelu a tabulkou v podkladové databázi. Mapování se definuje pomocí dotazu Entity SQL, který se vyhodnocuje vůči modelu úložiště, a sadu výsledků vyjadřujete z hlediska entity nebo přidružení v konceptuálním modelu. Vzhledem k tomu, že zobrazení dotazů jsou jen pro čtení, nelze použít standardní aktualizační příkazy k aktualizaci typů definovaných zobrazeními dotazů. Tyto typy můžete aktualizovat pomocí funkcí pro úpravy. Další informace naleznete v tématu Postupy: Mapování funkcí úprav na uložené procedury.
Poznámka:
V elementu QueryView nejsou podporovány výrazy Entity SQL, které obsahují GroupBy, agregace skupin nebo navigační vlastnosti.
QueryView element může být podřízený EntitySetMapping Element nebo AssociationSetMapping elementu. V prvním případě definuje zobrazení dotazu mapování jen pro čtení pro entitu v konceptuálním modelu. V druhém případě zobrazení dotazu definuje mapování jen pro čtení pro přidružení v koncepčním modelu.
Poznámka:
Pokud AssociationSetMapping element je pro přidružení s referenční omezení, AssociationSetMapping element je ignorován. Další informace naleznete v tématu ReferentialConstraint – element (CSDL).
Element QueryView nemůže mít žádné podřízené elementy.
Použitelné atributy
Následující tabulka popisuje atributy, které lze použít pro QueryView element.
Název atributu | Je povinné | Hodnota |
---|---|---|
TypeName | No | Název konceptuálního typu modelu, který je mapován zobrazením dotazu. |
Příklad
Následující příklad ukazuje QueryView element jako podřízený EntitySetMapping elementu a definuje mapování zobrazení dotazu pro typ entity Oddělení ve školním modelu.
<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>
Vzhledem k tomu, že dotaz vrací pouze podmnožinu členů typu Oddělení v modelu úložiště, byl typ Oddělení ve školním modelu upraven na základě tohoto mapování následujícím způsobem:
<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>
Příklad
Další příklad ukazuje QueryView element jako podřízený AssociationSetMapping element a definuje mapování jen pro čtení pro FK_Course_Department
přidružení ve školním modelu.
<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>
Komentáře
Zobrazení dotazů můžete definovat, abyste povolili následující scénáře:
- Definujte entitu v konceptuálním modelu, která nezahrnuje všechny vlastnosti entity v modelu úložiště. To zahrnuje vlastnosti, které nemají výchozí hodnoty a nepodporují hodnoty null .
- Namapujte počítané sloupce v modelu úložiště na vlastnosti typů entit v konceptuálním modelu.
- Definujte mapování, ve kterém nejsou podmínky používané k dělení entit v konceptuálním modelu založené na rovnosti. Pokud zadáte podmíněné mapování pomocí elementu Condition , zadaná podmínka se musí shodovat se zadanou hodnotou. Další informace naleznete v tématu Element podmínky (MSL).
- Namapujte stejný sloupec v modelu úložiště na více typů konceptuálního modelu.
- Namapujte více typů na stejnou tabulku.
- Definujte přidružení v konceptuálním modelu, které nejsou založené na cizích klíčích v relačním schématu.
- Pomocí vlastní obchodní logiky nastavte hodnotu vlastností v konceptuálním modelu. Můžete například namapovat řetězcovou hodnotu "T" ve zdroji dat na hodnotu true, logickou hodnotu v konceptuálním modelu.
- Definujte podmíněné filtry pro výsledky dotazu.
- Vynucujte méně omezení pro data v koncepčním modelu než v modelu úložiště. Můžete například vytvořit vlastnost v koncepčním modelu s možnou hodnotou null, i když sloupec, na který je namapován, nepodporuje hodnoty null.
Při definování zobrazení dotazů pro entity platí následující aspekty:
- Zobrazení dotazů jsou jen pro čtení. Aktualizace entit můžete provádět pouze pomocí funkcí pro úpravy.
- Když definujete typ entity zobrazením dotazu, musíte také definovat všechny související entity podle zobrazení dotazu.
- Když namapujete přidružení M:N k entitě v modelu úložiště, který představuje tabulku propojení v relačním schématu, musíte definovat prvek QueryView v elementu AssociationSetMapping pro tuto tabulku propojení.
- Zobrazení dotazů musí být definována pro všechny typy v hierarchii typů. To lze provést následovně:
-
- S jedním prvkem QueryView , který určuje jeden dotaz Entity SQL, který vrací sjednocení všech typů entit v hierarchii.
- S jedním elementem QueryView , který určuje jeden dotaz Entity SQL, který používá operátor CASE k vrácení konkrétního typu entity v hierarchii na základě konkrétní podmínky.
- Další prvek QueryView pro určitý typ v hierarchii. V tomto případě použijte TypeName atribut QueryView elementu k určení typu entity pro každé zobrazení.
- Při definování zobrazení dotazu nelze zadat atribut StorageSetName elementu EntitySetMapping .
- Pokud je definováno zobrazení dotazu, element EntitySetMappingnemůže také obsahovat mapování vlastností .
ResultBinding – element (MSL)
Element ResultBinding v jazyce specifikace mapování (MSL) mapuje hodnoty sloupců vrácené uloženými procedurami na vlastnosti entity v koncepčním modelu, když jsou funkce úprav typu entity mapovány na uložené procedury v podkladové databázi. Například když je hodnota sloupce identity vrácena vloženou uloženou procedurou, element ResultBinding mapuje vrácenou hodnotu na vlastnost typu entity v konceptuálním modelu.
ResultBinding element může být podřízený InsertFunction elementu nebo UpdateFunction elementu.
ResultBinding element nemůže mít žádné podřízené elementy.
Použitelné atributy
Následující tabulka popisuje atributy, které jsou použitelné pro ResultBinding element:
Název atributu | Je povinné | Hodnota |
---|---|---|
Název | Ano | Název vlastnosti entity v konceptuálním modelu, který se mapuje. |
ColumnName | Ano | Název namapovaného sloupce |
Příklad
Následující příklad je založený na školním modelu a ukazuje element InsertFunction , který slouží k mapování funkce insert typu entity Person na uloženou proceduru InsertPerson . (Uložená procedura InsertPerson je zobrazena níže a je deklarována v modelu úložiště.) Element ResultBinding slouží k mapování hodnoty sloupce vrácené uloženou procedurou (NewPersonID) na vlastnost typu entity (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>
Následující jazyk Transact-SQL popisuje uloženou proceduru 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;
ResultMapping – element (MSL)
Element ResultMapping v jazyce MSL (Mapping Specification Language) definuje mapování mezi importem funkce v koncepčním modelu a uloženou procedurou v podkladové databázi, pokud jsou splněny následující podmínky:
- Import funkce vrátí koncepční typ entity modelu nebo komplexní typ.
- Názvy sloupců vrácených uloženou procedurou přesně neodpovídají názvům vlastností typu entity nebo komplexního typu.
Ve výchozím nastavení je mapování mezi sloupci vrácenými uloženou procedurou a typem entity nebo komplexním typem založené na názvech sloupců a vlastností. Pokud názvy sloupců přesně neodpovídají názvům vlastností, musíte k definování mapování použít element ResultMapping . Příklad výchozího mapování naleznete v tématu FunctionImportMapping – element (MSL).
ResultMapping element je podřízený prvek FunctionImportMapping elementu.
Element ResultMapping může mít následující podřízené prvky:
- EntityTypeMapping (nula nebo více)
- ComplexTypeMapping
U elementu ResultMapping se nevztahují žádné atributy.
Příklad
Vezměte v úvahu následující uloženou proceduru:
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
Zvažte také následující koncepční typ entity modelu:
<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>
Aby bylo možné vytvořit import funkce, která vrací instance předchozího typu entity, musí být mapování mezi sloupci vrácenými uloženou procedurou a typem entity definováno v elementu 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>
ScalarProperty – element (MSL)
Element ScalarProperty v jazyce specifikace mapování (MSL) mapuje vlastnost na konceptuální typ entity modelu, komplexní typ nebo přidružení ke sloupci tabulky nebo parametru uložené procedury v podkladové databázi.
Poznámka:
Uložené procedury, na které se mapují funkce úprav, musí být deklarovány v modelu úložiště. Další informace najdete v tématu Element funkce (SSDL).
SkalarProperty element může být podřízený z následujících elementů:
- MappingFragment
- InsertFunction
- UpdateFunction
- DeleteFunction
- EndProperty
- ComplexProperty
- ResultMapping
Jako podřízený prvek MappingFragment, ComplexProperty nebo EndProperty, ScalarProperty element mapuje vlastnost v koncepčním modelu na sloupec v databázi. Jako podřízený Element InsertFunction, UpdateFunction nebo DeleteFunction, ScalarProperty element mapuje vlastnost v koncepčním modelu na parametr uložené procedury.
SkalarProperty element nemůže mít žádné podřízené elementy.
Použitelné atributy
Atributy, které se vztahují na ScalarProperty element se liší v závislosti na roli elementu.
Následující tabulka popisuje atributy, které jsou použitelné, když ScalarProperty element se používá k mapování konceptuální vlastnosti modelu na sloupec v databázi:
Název atributu | Je povinné | Hodnota |
---|---|---|
Název | Ano | Název konceptuální vlastnosti modelu, která se mapuje. |
ColumnName | Ano | Název sloupce tabulky, který se mapuje. |
Následující tabulka popisuje atributy, které jsou použitelné pro ScalarProperty element, když se používá k mapování konceptuální vlastnosti modelu na parametr uložené procedury:
Název atributu | Je povinné | Hodnota |
---|---|---|
Název | Ano | Název konceptuální vlastnosti modelu, která se mapuje. |
Název parametru | Ano | Název namapovaného parametru. |
Verze | No | Aktuální nebo Původní v závislosti na tom, jestli se má použít aktuální hodnota nebo původní hodnota vlastnosti pro kontroly souběžnosti. |
Příklad
Následující příklad ukazuje ScalarProperty element použitý dvěma způsoby:
- Mapování vlastností typu entity Person na sloupce tabulky Person.
- Mapování vlastností typu entity Person na parametry uložené procedury UpdatePerson . Uložené procedury jsou deklarovány v modelu úložiště.
<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>
Příklad
Další příklad ukazuje ScalarProperty element, který slouží k mapování funkcí vložení a odstranění konceptu přidružení modelu k uloženým procedur v databázi. Uložené procedury jsou deklarovány v modelu úložiště.
<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>
UpdateFunction – element (MSL)
Element UpdateFunction v jazyce specifikace mapování (MSL) mapuje funkci aktualizace typu entity v koncepčním modelu na uloženou proceduru v podkladové databázi. Uložené procedury, na které se mapují funkce úprav, musí být deklarovány v modelu úložiště. Další informace najdete v tématu Element funkce (SSDL).
Poznámka:
Pokud nemapujete všechny tři operace vložení, aktualizace nebo odstranění typu entity na uložené procedury, nemapované operace selžou, pokud se spustí za běhu a vyvolá se výjimka UpdateException.
Element UpdateFunction může být podřízeným elementem ModificationFunctionMapping a použit u EntityTypeMapping elementu.
Element UpdateFunction může mít následující podřízené prvky:
- AssociationEnd (nula nebo více)
- ComplexProperty (nula nebo více)
- ResultBinding (nula nebo jedna)
- SkalarProperty (nula nebo více)
Použitelné atributy
Následující tabulka popisuje atributy, které lze použít pro UpdateFunction element.
Název atributu | Je povinné | Hodnota |
---|---|---|
FunctionName | Ano | Název uložené procedury, na kterou je namapovaná funkce aktualizace, je kvalifikovaný název oboru názvů. Uložená procedura musí být deklarována v modelu úložiště. |
RowsAffectedParameter | No | Název výstupního parametru, který vrátí počet ovlivněných řádků. |
Příklad
Následující příklad je založen na školním modelu a zobrazuje element UpdateFunction použitý k mapování funkce aktualizace typu entity Person na uloženou proceduru UpdatePerson . Uložená procedura UpdatePerson je deklarována v modelu úložiště.
<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>