Specyfikacja CSDL
Uwaga
CsDL v1 jest nieobsługiwany. Zaktualizuj do wersji 3
Koncepcyjny język definicji schematu (CSDL) to język oparty na języku XML, który opisuje jednostki, relacje i funkcje tworzące koncepcyjny model aplikacji opartej na danych. Ten model koncepcyjny może być używany przez program Entity Framework lub Usługi danych programu WCF. Metadane opisane w pliku CSDL są używane przez platformę Entity Framework do mapowania jednostek i relacji zdefiniowanych w modelu koncepcyjnym na źródło danych. Aby uzyskać więcej informacji, zobacz specyfikację SSDL i specyfikację MSL.
CSDL to implementacja modelu danych jednostek platformy Entity Framework.
W aplikacji platformy Entity Framework metadane modelu koncepcyjnego są ładowane z pliku csdl (napisanego w pliku CSDL) do wystąpienia klasy System.Data.Metadata.Edm.EdmItemCollection i są dostępne przy użyciu metod w klasie System.Data.Metadata.Edm.MetadataWorkspace. Platforma Entity Framework używa metadanych modelu koncepcyjnego do tłumaczenia zapytań względem modelu koncepcyjnego na polecenia specyficzne dla źródła danych.
Program EF Designer przechowuje informacje o modelu koncepcyjnym w pliku edmx w czasie projektowania. W czasie kompilacji projektant EF używa informacji w pliku edmx do utworzenia pliku csdl wymaganego przez program Entity Framework w czasie wykonywania.
Wersje csDL są rozróżniane przez przestrzenie nazw XML.
Wersja CSDL | Przestrzeń nazw XML |
---|---|
CSDL v1 | https://schemas.microsoft.com/ado/2006/04/edm |
CSDL, wersja 2 | https://schemas.microsoft.com/ado/2008/09/edm |
CSDL v3 | https://schemas.microsoft.com/ado/2009/11/edm |
Association, element (CSDL)
Element skojarzenia definiuje relację między dwoma typami jednostek. Skojarzenie musi określać typy jednostek, które są zaangażowane w relację, oraz możliwą liczbę typów jednostek na każdym końcu relacji, która jest nazywana mętnością. Wielokrotność końca skojarzenia może mieć wartość jedną (1), zero lub jedną (0,1) lub wiele (*). Te informacje są określone w dwóch podrzędnych elementach końcowych.
Dostęp do wystąpień typu jednostki na jednym końcu skojarzenia można uzyskać za pośrednictwem właściwości nawigacji lub kluczy obcych, jeśli są one uwidocznione na typie jednostki.
W aplikacji wystąpienie skojarzenia reprezentuje określone skojarzenie między wystąpieniami typów jednostek. Wystąpienia skojarzeń są logicznie grupowane w zestawie skojarzeń.
Element skojarzenia może mieć następujące elementy podrzędne (w kolejności wymienionej):
- Dokumentacja (zero lub jeden element)
- Koniec (dokładnie 2 elementy)
- ReferentialConstraint (zero lub jeden element)
- Elementy adnotacji (zero lub więcej elementów)
Odpowiednie atrybuty
W poniższej tabeli opisano atrybuty, które można zastosować do elementu Skojarzenie.
Nazwa atrybutu | Jest wymagany | Wartość |
---|---|---|
Nazwa/nazwisko | Tak | Nazwa skojarzenia. |
Uwaga
Do elementu Skojarzenie można zastosować dowolną liczbę atrybutów adnotacji (atrybuty niestandardowe XML). Jednak atrybuty niestandardowe mogą nie należeć do żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL. W pełni kwalifikowane nazwy dla dwóch atrybutów niestandardowych nie mogą być takie same.
Przykład
W poniższym przykładzie przedstawiono element skojarzenia skojarzenia CustomerOrders, który definiuje skojarzenie CustomerOrders , gdy klucze obce nie zostały ujawnione w typach jednostek Klient i Zamówienie . Wartości wielodostępności dla każdego końca skojarzenia wskazują, że wiele zamówień może być skojarzonych z Klientem, ale tylko jeden klient może być skojarzony z zamówieniem. Ponadto element OnDelete wskazuje, że wszystkie zamówienia powiązane z konkretnym Klientem i załadowane do obiektuContext zostaną usunięte, jeśli klient zostanie usunięty.
<Association Name="CustomerOrders">
<End Type="ExampleModel.Customer" Role="Customer" Multiplicity="1" >
<OnDelete Action="Cascade" />
</End>
<End Type="ExampleModel.Order" Role="Order" Multiplicity="*" />
</Association>
W poniższym przykładzie przedstawiono element skojarzenia skojarzenia CustomerOrders, który definiuje skojarzenie CustomerOrders , gdy klucze obce zostały uwidocznione w typach jednostek Klient i Zamówienie . Po uwidocznieniu kluczy obcych relacja między jednostkami jest zarządzana za pomocą elementu ReferentialConstraint . Odpowiedni element AssociationSetMapping nie jest konieczny do mapowania tego skojarzenia na źródło danych.
<Association Name="CustomerOrders">
<End Type="ExampleModel.Customer" Role="Customer" Multiplicity="1" >
<OnDelete Action="Cascade" />
</End>
<End Type="ExampleModel.Order" Role="Order" Multiplicity="*" />
<ReferentialConstraint>
<Principal Role="Customer">
<PropertyRef Name="Id" />
</Principal>
<Dependent Role="Order">
<PropertyRef Name="CustomerId" />
</Dependent>
</ReferentialConstraint>
</Association>
AssociationSet, element (CSDL)
Element AssociationSet w języku definicji schematu koncepcyjnego (CSDL) jest kontenerem logicznym dla wystąpień skojarzeń tego samego typu. Zestaw skojarzeń zawiera definicję wystąpień skojarzenia grupowania, aby można je było mapować na źródło danych.
Element AssociationSet może zawierać następujące elementy podrzędne (w podanej kolejności):
- Dokumentacja (dozwolone są zero lub jeden element)
- Koniec (wymagane są dokładnie dwa elementy)
- Elementy adnotacji (zera lub więcej dozwolonych elementów)
Atrybut Skojarzenie określa typ skojarzenia, który zawiera zestaw skojarzeń. Zestawy jednostek tworzące końce zestawu skojarzeń są określane z dokładnie dwoma podrzędnymi elementami końcowymi .
Odpowiednie atrybuty
W poniższej tabeli opisano atrybuty, które można zastosować do elementu AssociationSet .
Nazwa atrybutu | Jest wymagany | Wartość |
---|---|---|
Nazwa/nazwisko | Tak | Nazwa zestawu jednostek. Wartość atrybutu Name nie może być taka sama jak wartość atrybutu Skojarzenie . |
Stowarzyszenie | Tak | W pełni kwalifikowana nazwa skojarzenia, którego zestaw skojarzeń zawiera wystąpienia. Skojarzenie musi znajdować się w tej samej przestrzeni nazw co zestaw skojarzeń. |
Uwaga
Do elementu AssociationSet można zastosować dowolną liczbę atrybutów adnotacji (atrybuty niestandardowe XML). Jednak atrybuty niestandardowe mogą nie należeć do żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL. W pełni kwalifikowane nazwy dla dwóch atrybutów niestandardowych nie mogą być takie same.
Przykład
W poniższym przykładzie przedstawiono element EntityContainer z dwoma elementami AssociationSet :
<EntityContainer Name="BooksContainer" >
<EntitySet Name="Books" EntityType="BooksModel.Book" />
<EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
<EntitySet Name="Authors" EntityType="BooksModel.Author" />
<AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
<End Role="Book" EntitySet="Books" />
<End Role="Publisher" EntitySet="Publishers" />
</AssociationSet>
<AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
<End Role="Book" EntitySet="Books" />
<End Role="Author" EntitySet="Authors" />
</AssociationSet>
</EntityContainer>
CollectionType, element (CSDL)
Element CollectionType w języku definicji schematu koncepcyjnego (CSDL) określa, że parametr funkcji lub typ zwracany funkcji jest kolekcją. Element CollectionType może być elementem podrzędnym elementu Parameter lub elementem ReturnType (Function). Typ kolekcji można określić przy użyciu atrybutu Type lub jednego z następujących elementów podrzędnych:
- Typ kolekcji
- Typ odwołania
- Typ wiersza
- TypeRef
Uwaga
Model nie sprawdzi, czy typ kolekcji jest określony zarówno z atrybutem Type , jak i elementem podrzędnym.
Odpowiednie atrybuty
W poniższej tabeli opisano atrybuty, które można zastosować do elementu CollectionType . Należy pamiętać, że atrybuty DefaultValue, MaxLength, FixedLength, Precision, Scale, Unicode i Collation mają zastosowanie tylko do kolekcji EDMSimpleTypes.
Nazwa atrybutu | Jest wymagany | Wartość |
---|---|---|
Type | Nie. | Typ kolekcji. |
Nullable | Nie. | Prawda (wartość domyślna) lub Fałsz w zależności od tego, czy właściwość może mieć wartość null. [!UWAGA] |
> W pliku CSDL w wersji 1 właściwość typu złożonego musi mieć wartość Nullable="False" . |
||
DefaultValue | Nie. | Wartość domyślna właściwości. |
MaxLength | Nie. | Maksymalna długość wartości właściwości. |
FixedLength | Nie. | True lub False w zależności od tego, czy wartość właściwości będzie przechowywana jako ciąg o stałej długości. |
Precyzja | Nie. | Precyzja wartości właściwości. |
Skaluj | Nie. | Skala wartości właściwości. |
SRID | Nie. | Identyfikator odwołania systemu przestrzennego. Prawidłowe tylko dla właściwości typów przestrzennych. Aby uzyskać więcej informacji, zobacz SRID i SRID (SQL Server) |
Unicode | Nie. | True lub False w zależności od tego, czy wartość właściwości będzie przechowywana jako ciąg Unicode. |
Sortowanie | Nie. | Ciąg określający sekwencję sortowania, która ma być używana w źródle danych. |
Uwaga
Do elementu CollectionType można zastosować dowolną liczbę atrybutów adnotacji (atrybuty niestandardowe XML). Jednak atrybuty niestandardowe mogą nie należeć do żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL. W pełni kwalifikowane nazwy dla dwóch atrybutów niestandardowych nie mogą być takie same.
Przykład
W poniższym przykładzie przedstawiono funkcję zdefiniowaną przez model, która używa elementu CollectionType do określenia, że funkcja zwraca kolekcję typów jednostek Person (zgodnie z określonym atrybutem ElementType).
<Function Name="LastNamesAfter">
<Parameter Name="someString" Type="Edm.String"/>
<ReturnType>
<CollectionType ElementType="SchoolModel.Person"/>
</ReturnType>
<DefiningExpression>
SELECT VALUE p
FROM SchoolEntities.People AS p
WHERE p.LastName >= someString
</DefiningExpression>
</Function>
W poniższym przykładzie przedstawiono funkcję zdefiniowaną przez model, która używa elementu CollectionType, aby określić, że funkcja zwraca kolekcję wierszy (jak określono w elemecie RowType).
<Function Name="LastNamesAfter">
<Parameter Name="someString" Type="Edm.String" />
<ReturnType>
<CollectionType>
<RowType>
<Property Name="FirstName" Type="Edm.String" Nullable="false" />
<Property Name="LastName" Type="Edm.String" Nullable="false" />
</RowType>
</CollectionType>
</ReturnType>
<DefiningExpression>
SELECT VALUE ROW(p.FirstName, p.LastName)
FROM SchoolEntities.People AS p
WHERE p.LastName >= somestring
</DefiningExpression>
</Function>
W poniższym przykładzie przedstawiono funkcję zdefiniowaną przez model, która używa elementu CollectionType, aby określić, że funkcja przyjmuje jako parametr kolekcję typów jednostek Dział.
<Function Name="GetAvgBudget">
<Parameter Name="Departments">
<CollectionType>
<TypeRef Type="SchoolModel.Department"/>
</CollectionType>
</Parameter>
<ReturnType Type="Collection(Edm.Decimal)"/>
<DefiningExpression>
SELECT VALUE AVG(d.Budget) FROM Departments AS d
</DefiningExpression>
</Function>
ComplexType, element (CSDL)
Element ComplexType definiuje strukturę danych składającą się z właściwości EdmSimpleType lub innych typów złożonych. Typ złożony może być właściwością typu jednostki lub innego typu złożonego. Typ złożony jest podobny do typu jednostki, w przypadku którego typ złożony definiuje dane. Istnieją jednak pewne kluczowe różnice między typami złożonymi i typami jednostek:
- Typy złożone nie mają tożsamości (lub kluczy) i dlatego nie mogą istnieć niezależnie. Typy złożone mogą istnieć tylko jako właściwości typów jednostek lub innych typów złożonych.
- Typy złożone nie mogą uczestniczyć w skojarzeniach. Żaden koniec skojarzenia nie może być typem złożonym, dlatego nie można zdefiniować właściwości nawigacji dla typów złożonych.
- Właściwość typu złożonego nie może mieć wartości null, chociaż właściwości skalarne typu złożonego mogą mieć wartość null.
Element ComplexType może mieć następujące elementy podrzędne (w podanej kolejności):
- Dokumentacja (zero lub jeden element)
- Właściwość (zero lub więcej elementów)
- Elementy adnotacji (zero lub więcej elementów)
W poniższej tabeli opisano atrybuty, które można zastosować do elementu ComplexType .
Nazwa atrybutu | Jest wymagany | Wartość |
---|---|---|
Nazwisko | Tak | Nazwa typu złożonego. Nazwa typu złożonego nie może być taka sama jak nazwa innego typu złożonego, typu jednostki lub skojarzenia należącego do zakresu modelu. |
BaseType | Nie. | Nazwa innego typu złożonego, który jest podstawowym typem zdefiniowanego typu złożonego. [!UWAGA] |
> Ten atrybut nie ma zastosowania w pliku CSDL w wersji 1. Dziedziczenie dla typów złożonych nie jest obsługiwane w tej wersji. | ||
Abstract | Nie. | Prawda lub Fałsz (wartość domyślna) w zależności od tego, czy typ złożony jest typem abstrakcyjnym. [!UWAGA] |
> Ten atrybut nie ma zastosowania w pliku CSDL w wersji 1. Typy złożone w tej wersji nie mogą być typami abstrakcyjnym. |
Uwaga
Do elementu ComplexType można zastosować dowolną liczbę atrybutów adnotacji (atrybuty niestandardowe XML). Jednak atrybuty niestandardowe mogą nie należeć do żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL. W pełni kwalifikowane nazwy dla dwóch atrybutów niestandardowych nie mogą być takie same.
Przykład
W poniższym przykładzie przedstawiono typ złożony, Adres z właściwościami EdmSimpleType StreetAddress, City, StateOrProvince, Country i PostalCode.
<ComplexType Name="Address" >
<Property Type="String" Name="StreetAddress" Nullable="false" />
<Property Type="String" Name="City" Nullable="false" />
<Property Type="String" Name="StateOrProvince" Nullable="false" />
<Property Type="String" Name="Country" Nullable="false" />
<Property Type="String" Name="PostalCode" Nullable="false" />
</ComplexType>
Aby zdefiniować typ złożony Address (powyżej) jako właściwość typu jednostki, należy zadeklarować typ właściwości w definicji typu jednostki. Poniższy przykład przedstawia właściwość Address jako typ złożony dla typu jednostki (Publisher):
<EntityType Name="Publisher">
<Key>
<PropertyRef Name="Id" />
</Key>
<Property Type="Int32" Name="Id" Nullable="false" />
<Property Type="String" Name="Name" Nullable="false" />
<Property Type="BooksModel.Address" Name="Address" Nullable="false" />
<NavigationProperty Name="Books" Relationship="BooksModel.PublishedBy"
FromRole="Publisher" ToRole="Book" />
</EntityType>
DefiningExpression, element (CSDL)
Element DefiningExpression w języku definicji schematu koncepcyjnego (CSDL) zawiera wyrażenie Entity SQL definiujące funkcję w modelu koncepcyjnym.
Uwaga
Na potrzeby walidacji element DefiningExpression może zawierać dowolną zawartość. Jednak program Entity Framework zgłosi wyjątek w czasie wykonywania, jeśli element DefiningExpression nie zawiera prawidłowej jednostki SQL.
Odpowiednie atrybuty
Do elementu DefiningExpression można zastosować dowolną liczbę atrybutów adnotacji (atrybuty niestandardowe XML). Jednak atrybuty niestandardowe mogą nie należeć do żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL. W pełni kwalifikowane nazwy dla dwóch atrybutów niestandardowych nie mogą być takie same.
Przykład
W poniższym przykładzie użyto elementu DefineExpression do zdefiniowania funkcji zwracającej liczbę lat od opublikowania książki. Zawartość elementu DefiningExpression jest napisana w języku Entity SQL.
<Function Name="GetYearsInPrint" ReturnType="Edm.Int32" >
<Parameter Name="book" Type="BooksModel.Book" />
<DefiningExpression>
Year(CurrentDateTime()) - Year(cast(book.PublishedDate as DateTime))
</DefiningExpression>
</Function>
Element zależny (CSDL)
Element zależny w języku definicji schematu koncepcyjnego (CSDL) jest elementem podrzędnym elementu ReferentialConstraint i definiuje zależny koniec ograniczenia odwołania. Element ReferentialConstraint definiuje funkcje podobne do ograniczeń integralności referencyjnej w relacyjnej bazie danych. W taki sam sposób, w jaki kolumna (lub kolumny) z tabeli bazy danych może odwoływać się do klucza podstawowego innej tabeli, właściwość (lub właściwości) typu jednostki może odwoływać się do klucza jednostki innego typu. Typ jednostki, do którego odwołuje się odwołanie, jest nazywany głównym końcem ograniczenia. Typ jednostki odwołujący się do głównego końca jest nazywany zależnym końcem ograniczenia. Elementy PropertyRef służą do określania kluczy odwołujących się do głównego końca.
Element zależny może mieć następujące elementy podrzędne (w kolejności wymienionej):
- PropertyRef (co najmniej jeden element)
- Elementy adnotacji (zero lub więcej elementów)
Odpowiednie atrybuty
W poniższej tabeli opisano atrybuty, które można zastosować do elementu Zależne .
Nazwa atrybutu | Jest wymagany | Wartość |
---|---|---|
Rola | Tak | Nazwa typu jednostki na zależnym końcu skojarzenia. |
Uwaga
Do elementu Zależne można zastosować dowolną liczbę atrybutów adnotacji (atrybuty niestandardowe XML). Jednak atrybuty niestandardowe mogą nie należeć do żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL. W pełni kwalifikowane nazwy dla dwóch atrybutów niestandardowych nie mogą być takie same.
Przykład
W poniższym przykładzie przedstawiono element ReferentialConstraint używany jako część definicji skojarzenia PublishedBy . Właściwość PublisherId typu jednostki Book stanowi zależny koniec ograniczenia odwołania.
<Association Name="PublishedBy">
<End Type="BooksModel.Book" Role="Book" Multiplicity="*" >
</End>
<End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
<ReferentialConstraint>
<Principal Role="Publisher">
<PropertyRef Name="Id" />
</Principal>
<Dependent Role="Book">
<PropertyRef Name="PublisherId" />
</Dependent>
</ReferentialConstraint>
</Association>
Documentation, element (CSDL)
Element Documentation w języku definicji schematu koncepcyjnego (CSDL) może służyć do dostarczania informacji o obiekcie zdefiniowanym w elemecie nadrzędnym. W pliku edmx, gdy element Documentation jest elementem podrzędnym elementu, który pojawia się jako obiekt na powierzchni projektowej projektanta EF (na przykład jednostki, skojarzenia lub właściwości), zawartość elementu Documentation pojawi się w oknie Właściwości programu Visual Studio dla obiektu.
Element Documentation może zawierać następujące elementy podrzędne (w podanej kolejności):
- Podsumowanie: krótki opis elementu nadrzędnego. (zero lub jeden element)
- LongDescription: obszerny opis elementu nadrzędnego. (zero lub jeden element)
- Elementy adnotacji. (zero lub więcej elementów)
Odpowiednie atrybuty
Do elementu Documentation można zastosować dowolną liczbę atrybutów adnotacji (atrybuty niestandardowe XML). Jednak atrybuty niestandardowe mogą nie należeć do żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL. W pełni kwalifikowane nazwy dla dwóch atrybutów niestandardowych nie mogą być takie same.
Przykład
W poniższym przykładzie pokazano element Documentation jako element podrzędny elementu EntityType. Jeśli poniższy fragment kodu znajdował się w zawartości CSDL pliku edmx, zawartość elementów Summary i LongDescription będzie wyświetlana w oknie Właściwości programu Visual Studio po kliknięciu Customer
typu jednostki.
<EntityType Name="Customer">
<Documentation>
<Summary>Summary here.</Summary>
<LongDescription>Long description here.</LongDescription>
</Documentation>
<Key>
<PropertyRef Name="CustomerId" />
</Key>
<Property Type="Int32" Name="CustomerId" Nullable="false" />
<Property Type="String" Name="Name" Nullable="false" />
</EntityType>
End, element (CSDL)
Element End w języku definicji schematu koncepcyjnego (CSDL) może być elementem podrzędnym elementu Skojarzenie lub elementem AssociationSet. W każdym przypadku rola elementu End jest inna, a odpowiednie atrybuty są różne.
End, element jako element podrzędny elementu skojarzenia
Element Końcowy (jako element podrzędny elementu skojarzenia ) identyfikuje typ jednostki na jednym końcu skojarzenia i liczbę wystąpień typu jednostki, które mogą istnieć na tym końcu skojarzenia. Końce skojarzenia są definiowane jako część skojarzenia; skojarzenie musi mieć dokładnie dwa końce skojarzenia. Dostęp do wystąpień typu jednostki na jednym końcu skojarzenia można uzyskać za pośrednictwem właściwości nawigacji lub kluczy obcych, jeśli są one uwidocznione na typie jednostki.
Element End może zawierać następujące elementy podrzędne (w podanej kolejności):
- Dokumentacja (zero lub jeden element)
- OnDelete (zero lub jeden element)
- Elementy adnotacji (zero lub więcej elementów)
Odpowiednie atrybuty
W poniższej tabeli opisano atrybuty, które można zastosować do elementu End , gdy jest elementem podrzędnym elementu Skojarzenie .
Nazwa atrybutu | Jest wymagany | Wartość |
---|---|---|
Type | Tak | Nazwa typu jednostki na jednym końcu skojarzenia. |
Rola | Nie. | Nazwa końca skojarzenia. Jeśli nie podano nazwy, zostanie użyta nazwa typu jednostki na końcu skojarzenia. |
Kardynalność | Tak | 1, 0..1 lub * w zależności od liczby wystąpień typu jednostki, które mogą znajdować się na końcu skojarzenia. 1 wskazuje, że na końcu skojarzenia istnieje dokładnie jedno wystąpienie typu jednostki. 0..1 wskazuje, że na końcu skojarzenia istnieją wystąpienia zero lub jeden typ jednostki. * wskazuje, że na końcu skojarzenia istnieje zero, co najmniej jedno wystąpienie typu jednostki. |
Uwaga
Do elementu End można zastosować dowolną liczbę atrybutów adnotacji (atrybuty niestandardowe XML). Jednak atrybuty niestandardowe mogą nie należeć do żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL. W pełni kwalifikowane nazwy dla dwóch atrybutów niestandardowych nie mogą być takie same.
Przykład
W poniższym przykładzie przedstawiono element skojarzenia , który definiuje skojarzenie CustomerOrders . Wartości wielodostępności dla każdego końca skojarzenia wskazują, że wiele zamówień może być skojarzonych z Klientem, ale tylko jeden klient może być skojarzony z zamówieniem. Ponadto element OnDelete wskazuje, że wszystkie zamówienia powiązane z określonym Klientem i załadowane do obiektuContext zostaną usunięte, jeśli klient zostanie usunięty.
<Association Name="CustomerOrders">
<End Type="ExampleModel.Customer" Role="Customer" Multiplicity="1" />
<End Type="ExampleModel.Order" Role="Order" Multiplicity="*">
<OnDelete Action="Cascade" />
</End>
</Association>
End, element jako element podrzędny elementu AssociationSet
Element End określa jeden koniec zestawu skojarzeń. Element AssociationSet musi zawierać dwa elementy końcowe . Informacje zawarte w elemecie End są używane w mapowaniu skojarzenia ustawionego na źródło danych.
Element End może zawierać następujące elementy podrzędne (w podanej kolejności):
- Dokumentacja (zero lub jeden element)
- Elementy adnotacji (zero lub więcej elementów)
Uwaga
Elementy adnotacji muszą być wyświetlane po wszystkich innych elementach podrzędnych. Elementy adnotacji są dozwolone tylko w pliku CSDL w wersji 2 lub nowszej.
Odpowiednie atrybuty
W poniższej tabeli opisano atrybuty, które można zastosować do elementu End , gdy jest on elementem podrzędnym elementu AssociationSet .
Nazwa atrybutu | Jest wymagany | Wartość |
---|---|---|
EntitySet | Tak | Nazwa elementu EntitySet , który definiuje jeden koniec nadrzędnego elementu AssociationSet . Element EntitySet musi być zdefiniowany w tym samym kontenerze jednostki co nadrzędny element AssociationSet . |
Rola | Nie. | Nazwa końca zestawu skojarzeń. Jeśli atrybut roli nie jest używany, nazwa końca zestawu skojarzeń będzie nazwą zestawu jednostek. |
Uwaga
Do elementu End można zastosować dowolną liczbę atrybutów adnotacji (atrybuty niestandardowe XML). Jednak atrybuty niestandardowe mogą nie należeć do żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL. W pełni kwalifikowane nazwy dla dwóch atrybutów niestandardowych nie mogą być takie same.
Przykład
W poniższym przykładzie przedstawiono element EntityContainer z dwoma elementami AssociationSet , z których każdy ma dwa elementy końcowe :
<EntityContainer Name="BooksContainer" >
<EntitySet Name="Books" EntityType="BooksModel.Book" />
<EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
<EntitySet Name="Authors" EntityType="BooksModel.Author" />
<AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
<End Role="Book" EntitySet="Books" />
<End Role="Publisher" EntitySet="Publishers" />
</AssociationSet>
<AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
<End Role="Book" EntitySet="Books" />
<End Role="Author" EntitySet="Authors" />
</AssociationSet>
</EntityContainer>
EntityContainer, element (CSDL)
Element EntityContainer w języku definicji schematu koncepcyjnego (CSDL) jest kontenerem logicznym dla zestawów jednostek, zestawów skojarzeń i importów funkcji. Koncepcyjny kontener jednostek modelu jest mapowy na kontener jednostki modelu magazynu za pomocą elementu EntityContainerMapping. Kontener jednostki modelu magazynu opisuje strukturę bazy danych: zestawy jednostek opisują tabele, zestawy skojarzeń opisują ograniczenia klucza obcego i importy funkcji opisują procedury składowane w bazie danych.
Element EntityContainer może mieć zero lub jeden element dokumentacji. Jeśli element Documentation jest obecny, musi poprzedzać wszystkie elementy EntitySet, AssociationSet i FunctionImport.
Element EntityContainer może mieć zero lub więcej z następujących elementów podrzędnych (w kolejności wymienionej):
- EntitySet
- Zestaw skojarzeń
- FunkcjaImportuj
- Elementy adnotacji
Można rozszerzyć element EntityContainer, aby uwzględnić zawartość innej jednostkiContainer znajdującej się w tej samej przestrzeni nazw. Aby dołączyć zawartość innej jednostkiContainer, w odwołaniu do elementu EntityContainer ustaw wartość atrybutu Extends na nazwę elementu EntityContainer, który chcesz uwzględnić. Wszystkie elementy podrzędne dołączonego elementu EntityContainer będą traktowane jako elementy podrzędne elementu odwołującego się do elementu EntityContainer.
Odpowiednie atrybuty
W poniższej tabeli opisano atrybuty, które można zastosować do elementu Using .
Nazwa atrybutu | Jest wymagany | Wartość |
---|---|---|
Nazwa/nazwisko | Tak | Nazwa kontenera jednostki. |
Rozszerza | Nie. | Nazwa innego kontenera jednostki w tej samej przestrzeni nazw. |
Uwaga
Do elementu EntityContainer można zastosować dowolną liczbę atrybutów adnotacji (atrybuty niestandardowe XML). Jednak atrybuty niestandardowe mogą nie należeć do żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL. W pełni kwalifikowane nazwy dla dwóch atrybutów niestandardowych nie mogą być takie same.
Przykład
W poniższym przykładzie przedstawiono element EntityContainer , który definiuje trzy zestawy jednostek i dwa zestawy skojarzeń.
<EntityContainer Name="BooksContainer" >
<EntitySet Name="Books" EntityType="BooksModel.Book" />
<EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
<EntitySet Name="Authors" EntityType="BooksModel.Author" />
<AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
<End Role="Book" EntitySet="Books" />
<End Role="Publisher" EntitySet="Publishers" />
</AssociationSet>
<AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
<End Role="Book" EntitySet="Books" />
<End Role="Author" EntitySet="Authors" />
</AssociationSet>
</EntityContainer>
EntitySet, element (CSDL)
Element EntitySet w języku definicji schematu koncepcyjnego jest kontenerem logicznym dla wystąpień typu jednostki i wystąpień dowolnego typu pochodzącego z tego typu jednostki. Relacja między typem jednostki a zestawem jednostek jest analogiczna do relacji między wierszem a tabelą w relacyjnej bazie danych. Podobnie jak wiersz, typ jednostki definiuje zestaw powiązanych danych, a podobnie jak tabela, zestaw jednostek zawiera wystąpienia tej definicji. Zestaw jednostek zawiera konstrukcję służącą do grupowania wystąpień typu jednostki, dzięki czemu mogą być mapowane na powiązane struktury danych w źródle danych.
Można zdefiniować więcej niż jeden zestaw jednostek dla określonego typu jednostki.
Uwaga
Projektant EF nie obsługuje modeli koncepcyjnych zawierających wiele zestawów jednostek na typ.
Element EntitySet może zawierać następujące elementy podrzędne (w podanej kolejności):
- Documentation, element (zezwolono na zero lub jeden element)
- Elementy adnotacji (zera lub więcej dozwolonych elementów)
Odpowiednie atrybuty
W poniższej tabeli opisano atrybuty, które można zastosować do elementu EntitySet .
Nazwa atrybutu | Jest wymagany | Wartość |
---|---|---|
Nazwa/nazwisko | Tak | Nazwa zestawu jednostek. |
Typ jednostki | Tak | W pełni kwalifikowana nazwa typu jednostki, dla którego zestaw jednostek zawiera wystąpienia. |
Uwaga
Do elementu EntitySet można zastosować dowolną liczbę atrybutów adnotacji (atrybuty niestandardowe XML). Jednak atrybuty niestandardowe mogą nie należeć do żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL. W pełni kwalifikowane nazwy dla dwóch atrybutów niestandardowych nie mogą być takie same.
Przykład
Poniższy przykład przedstawia element EntityContainer z trzema elementami EntitySet :
<EntityContainer Name="BooksContainer" >
<EntitySet Name="Books" EntityType="BooksModel.Book" />
<EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
<EntitySet Name="Authors" EntityType="BooksModel.Author" />
<AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
<End Role="Book" EntitySet="Books" />
<End Role="Publisher" EntitySet="Publishers" />
</AssociationSet>
<AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
<End Role="Book" EntitySet="Books" />
<End Role="Author" EntitySet="Authors" />
</AssociationSet>
</EntityContainer>
Istnieje możliwość zdefiniowania wielu zestawów jednostek na typ (MEST). W poniższym przykładzie zdefiniowano kontener jednostki z dwoma zestawami jednostek dla typu jednostki Book :
<EntityContainer Name="BooksContainer" >
<EntitySet Name="Books" EntityType="BooksModel.Book" />
<EntitySet Name="FictionBooks" EntityType="BooksModel.Book" />
<EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
<EntitySet Name="Authors" EntityType="BooksModel.Author" />
<AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
<End Role="Book" EntitySet="Books" />
<End Role="Publisher" EntitySet="Publishers" />
</AssociationSet>
<AssociationSet Name="BookAuthor" Association="BooksModel.BookAuthor">
<End Role="Book" EntitySet="Books" />
<End Role="Author" EntitySet="Authors" />
</AssociationSet>
</EntityContainer>
EntityType, element (CSDL)
Element EntityType reprezentuje strukturę koncepcji najwyższego poziomu, taką jak klient lub zamówienie, w modelu koncepcyjnym. Typ jednostki to szablon dla wystąpień typów jednostek w aplikacji. Każdy szablon zawiera następujące informacje:
- Unikatowa nazwa. (Wymagane).
- Klucz jednostki zdefiniowany przez co najmniej jedną właściwościę. (Wymagane).
- Właściwości zawierające dane. (opcjonalnie)
- Właściwości nawigacji, które umożliwiają nawigację z jednego końca skojarzenia na drugim końcu. (opcjonalnie)
W aplikacji wystąpienie typu jednostki reprezentuje określony obiekt (np. określony klient lub zamówienie). Każde wystąpienie typu jednostki musi mieć unikatowy klucz jednostki w zestawie jednostek.
Dwa wystąpienia typu jednostki są traktowane jako równe tylko wtedy, gdy są tego samego typu, a wartości ich kluczy jednostki są takie same.
Element EntityType może mieć następujące elementy podrzędne (w podanej kolejności):
- Dokumentacja (zero lub jeden element)
- Klucz (zero lub jeden element)
- Właściwość (zero lub więcej elementów)
- NavigationProperty (zero lub więcej elementów)
- Elementy adnotacji (zero lub więcej elementów)
Odpowiednie atrybuty
W poniższej tabeli opisano atrybuty, które można zastosować do elementu EntityType .
Nazwa atrybutu | Jest wymagany | Wartość |
---|---|---|
Nazwa/nazwisko | Tak | Nazwa typu jednostki. |
BaseType | Nie. | Nazwa innego typu jednostki, który jest podstawowym typem zdefiniowanego typu jednostki. |
Abstract | Nie. | Prawda czy fałsz, w zależności od tego, czy typ jednostki jest typem abstrakcyjnym. |
OpenType | Nie. | Prawda czy fałsz w zależności od tego, czy typ jednostki jest typem otwartej jednostki. [!UWAGA] |
> Atrybut OpenType ma zastosowanie tylko do typów jednostek zdefiniowanych w modelach koncepcyjnych używanych z usługami ADO.NET Data Services. |
Uwaga
Do elementu EntityType można zastosować dowolną liczbę atrybutów adnotacji (atrybuty niestandardowe XML). Jednak atrybuty niestandardowe mogą nie należeć do żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL. W pełni kwalifikowane nazwy dla dwóch atrybutów niestandardowych nie mogą być takie same.
Przykład
W poniższym przykładzie przedstawiono element EntityType z trzema elementami właściwości i dwoma elementami NavigationProperty :
<EntityType Name="Book">
<Key>
<PropertyRef Name="ISBN" />
</Key>
<Property Type="String" Name="ISBN" Nullable="false" />
<Property Type="String" Name="Title" Nullable="false" />
<Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
<NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
FromRole="Book" ToRole="Publisher" />
<NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
FromRole="Book" ToRole="Author" />
</EntityType>
EnumType, element (CSDL)
Element EnumType reprezentuje wyliczony typ.
Element EnumType może zawierać następujące elementy podrzędne (w podanej kolejności):
- Dokumentacja (zero lub jeden element)
- Składowa (zero lub więcej elementów)
- Elementy adnotacji (zero lub więcej elementów)
Odpowiednie atrybuty
W poniższej tabeli opisano atrybuty, które można zastosować do elementu EnumType .
Nazwa atrybutu | Jest wymagany | Wartość |
---|---|---|
Nazwa/nazwisko | Tak | Nazwa typu jednostki. |
IsFlags | Nie. | Prawda czy fałsz, w zależności od tego, czy typ wyliczenia może być używany jako zestaw flag. Wartość domyślna to False.. |
Typ bazowy | Nie. | Edm.Byte, Edm.Int16, Edm.Int32, Edm.Int64 lub Edm.SByte definiujący zakres wartości typu. Domyślnym podstawowym typem elementów wyliczenia jest Edm.Int32.. |
Uwaga
Do elementu EnumType można zastosować dowolną liczbę atrybutów adnotacji (atrybuty niestandardowe XML). Jednak atrybuty niestandardowe mogą nie należeć do żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL. W pełni kwalifikowane nazwy dla dwóch atrybutów niestandardowych nie mogą być takie same.
Przykład
W poniższym przykładzie przedstawiono element EnumType z trzema elementami składowymi :
<EnumType Name="Color" IsFlags=”false” UnderlyingTyp=”Edm.Byte”>
<Member Name="Red" />
<Member Name="Green" />
<Member Name="Blue" />
</EntityType>
Function, element (CSDL)
Element Funkcji w języku definicji schematu koncepcyjnego (CSDL) służy do definiowania lub deklarowania funkcji w modelu koncepcyjnym. Funkcja jest definiowana przy użyciu elementu DefinedExpression.
Element funkcji może zawierać następujące elementy podrzędne (w kolejności wymienionej):
- Dokumentacja (zero lub jeden element)
- Parametr (zero lub więcej elementów)
- DefiningExpression (zero lub jeden element)
- ReturnType (funkcja) (zero lub jeden element)
- Elementy adnotacji (zero lub więcej elementów)
Typ zwracany dla funkcji musi być określony za pomocą elementu ReturnType (Function) lub atrybutu ReturnType (patrz poniżej), ale nie obu. Możliwe typy zwracane to dowolny typ EdmSimpleType, typ jednostki, typ złożony, typ wiersza lub typ ref (lub kolekcja jednego z tych typów).
Odpowiednie atrybuty
W poniższej tabeli opisano atrybuty, które można zastosować do elementu funkcji .
Nazwa atrybutu | Jest wymagany | Wartość |
---|---|---|
Nazwa/nazwisko | Tak | Nazwa funkcji. |
ReturnType | Nie. | Typ zwracany przez funkcję. |
Uwaga
Do elementu funkcji można zastosować dowolną liczbę atrybutów adnotacji (atrybuty niestandardowe XML). Jednak atrybuty niestandardowe mogą nie należeć do żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL. W pełni kwalifikowane nazwy dla dwóch atrybutów niestandardowych nie mogą być takie same.
Przykład
W poniższym przykładzie użyto elementu funkcji do zdefiniowania funkcji, która zwraca liczbę lat od czasu zatrudnienia instruktora.
<Function Name="YearsSince" ReturnType="Edm.Int32">
<Parameter Name="date" Type="Edm.DateTime" />
<DefiningExpression>
Year(CurrentDateTime()) - Year(date)
</DefiningExpression>
</Function>
FunctionImport, element (CSDL)
Element FunctionImport w języku definicji schematu koncepcyjnego (CSDL) reprezentuje funkcję zdefiniowaną w źródle danych, ale dostępną dla obiektów za pośrednictwem modelu koncepcyjnego. Na przykład element funkcji w modelu magazynu może służyć do reprezentowania procedury składowanej w bazie danych. Element FunctionImport w modelu koncepcyjnym reprezentuje odpowiednią funkcję w aplikacji platformy Entity Framework i jest mapowany na funkcję modelu magazynu przy użyciu elementu FunctionImportMapping. Po wywołaniu funkcji w aplikacji odpowiednia procedura składowana jest wykonywana w bazie danych.
Element FunctionImport może mieć następujące elementy podrzędne (w podanej kolejności):
- Dokumentacja (dozwolone są zero lub jeden element)
- Parametr (zera lub więcej dozwolonych elementów)
- Elementy adnotacji (zera lub więcej dozwolonych elementów)
- ReturnType (FunctionImport) (zera lub więcej dozwolonych elementów)
Dla każdego parametru akceptowanego przez funkcję należy zdefiniować jeden element Parametr .
Typ zwracany dla funkcji musi być określony za pomocą elementu ReturnType (FunctionImport) lub atrybutu ReturnType (patrz poniżej), ale nie obu. Wartość zwracanego typu musi być kolekcją typu EdmSimpleType, EntityType lub ComplexType.
Odpowiednie atrybuty
W poniższej tabeli opisano atrybuty, które można zastosować do elementu FunctionImport .
Nazwa atrybutu | Jest wymagany | Wartość |
---|---|---|
Nazwa/nazwisko | Tak | Nazwa zaimportowanej funkcji. |
ReturnType | Nie. | Typ zwracany przez funkcję. Nie używaj tego atrybutu, jeśli funkcja nie zwraca wartości. W przeciwnym razie wartość musi być kolekcją typu ComplexType, EntityType lub EDMSimpleType. |
EntitySet | Nie. | Jeśli funkcja zwraca kolekcję typów jednostek, wartość zestawu EntitySet musi być jednostką, do której należy kolekcja. W przeciwnym razie nie można użyć atrybutu EntitySet . |
IsComposable | Nie. | Jeśli wartość jest ustawiona na true, funkcja jest komponowana (funkcja z wartością tabeli) i może być używana w zapytaniu LINQ. Wartość domyślna to false. |
Uwaga
Do elementu FunctionImport można zastosować dowolną liczbę atrybutów adnotacji (atrybuty niestandardowe XML). Jednak atrybuty niestandardowe mogą nie należeć do żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL. W pełni kwalifikowane nazwy dla dwóch atrybutów niestandardowych nie mogą być takie same.
Przykład
W poniższym przykładzie przedstawiono element FunctionImport , który akceptuje jeden parametr i zwraca kolekcję typów jednostek:
<FunctionImport Name="GetStudentGrades"
EntitySet="StudentGrade"
ReturnType="Collection(SchoolModel.StudentGrade)">
<Parameter Name="StudentID" Mode="In" Type="Int32" />
</FunctionImport>
Key, element (CSDL)
Element Klucz jest elementem podrzędnym elementu EntityType i definiuje klucz jednostki (właściwość lub zestaw właściwości typu jednostki, który określa tożsamość). Właściwości tworzące klucz jednostki są wybierane w czasie projektowania. Wartości właściwości klucza jednostki muszą jednoznacznie identyfikować wystąpienie typu jednostki w ramach zestawu jednostek w czasie wykonywania. Właściwości tworzące klucz jednostki należy wybrać w celu zagwarantowania unikatowości wystąpień w zestawie jednostek. Element Klucz definiuje klucz jednostki, odwołując się do co najmniej jednej właściwości typu jednostki.
Element Klucz może mieć następujące elementy podrzędne:
- PropertyRef (co najmniej jeden element)
- Elementy adnotacji (zero lub więcej elementów)
Odpowiednie atrybuty
Do elementu Klucz można zastosować dowolną liczbę atrybutów adnotacji (atrybuty niestandardowe XML). Jednak atrybuty niestandardowe mogą nie należeć do żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL. W pełni kwalifikowane nazwy dla dwóch atrybutów niestandardowych nie mogą być takie same.
Przykład
W poniższym przykładzie zdefiniowano typ jednostki o nazwie Book. Klucz jednostki jest definiowany przez odwołanie się do właściwości ISBN typu jednostki.
<EntityType Name="Book">
<Key>
<PropertyRef Name="ISBN" />
</Key>
<Property Type="String" Name="ISBN" Nullable="false" />
<Property Type="String" Name="Title" Nullable="false" />
<Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
<NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
FromRole="Book" ToRole="Publisher" />
<NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
FromRole="Book" ToRole="Author" />
</EntityType>
Właściwość ISBN jest dobrym wyborem dla klucza jednostki, ponieważ unikatowy numer międzynarodowej książki standardowej (ISBN) identyfikuje książkę.
W poniższym przykładzie przedstawiono typ jednostki (Autor), który ma klucz jednostki składający się z dwóch właściwości: Name (Nazwa) i Address (Adres).
<EntityType Name="Author">
<Key>
<PropertyRef Name="Name" />
<PropertyRef Name="Address" />
</Key>
<Property Type="String" Name="Name" Nullable="false" />
<Property Type="String" Name="Address" Nullable="false" />
<NavigationProperty Name="Books" Relationship="BooksModel.WrittenBy"
FromRole="Author" ToRole="Book" />
</EntityType>
Użycie nazwy i adresu dla klucza jednostki jest rozsądnym wyborem, ponieważ dwóch autorów tej samej nazwy jest mało prawdopodobne, aby mieszkali pod tym samym adresem. Jednak ten wybór klucza jednostki nie gwarantuje absolutnie unikatowych kluczy jednostek w zestawie jednostek. W tym przypadku zaleca się dodanie właściwości, takiej jak AuthorId, która może służyć do unikatowego identyfikowania autora.
Member, element (CSDL)
Element członkowski jest elementem podrzędnym elementu EnumType i definiuje element członkowski typu wyliczanego.
Odpowiednie atrybuty
W poniższej tabeli opisano atrybuty, które można zastosować do elementu FunctionImport .
Nazwa atrybutu | Jest wymagany | Wartość |
---|---|---|
Nazwa/nazwisko | Tak | Nazwa elementu członkowskiego. |
Wartość | Nie. | Wartość elementu członkowskiego. Domyślnie pierwszy element członkowski ma wartość 0, a wartość każdego kolejnego modułu wyliczającego jest zwiększana o 1. Może istnieć wiele elementów członkowskich o tych samych wartościach. |
Uwaga
Do elementu FunctionImport można zastosować dowolną liczbę atrybutów adnotacji (atrybuty niestandardowe XML). Jednak atrybuty niestandardowe mogą nie należeć do żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL. W pełni kwalifikowane nazwy dla dwóch atrybutów niestandardowych nie mogą być takie same.
Przykład
W poniższym przykładzie przedstawiono element EnumType z trzema elementami składowymi :
<EnumType Name="Color">
<Member Name="Red" Value=”1”/>
<Member Name="Green" Value=”3” />
<Member Name="Blue" Value=”5”/>
</EntityType>
NavigationProperty, element (CSDL)
Element NavigationProperty definiuje właściwość nawigacji, która zawiera odwołanie do drugiego końca skojarzenia. W przeciwieństwie do właściwości zdefiniowanych za pomocą elementu Właściwość właściwości właściwości nie definiują kształtu i cech danych. Zapewniają one sposób nawigowania po skojarzeniu między dwoma typami jednostek.
Należy pamiętać, że właściwości nawigacji są opcjonalne dla obu typów jednostek na końcach skojarzenia. Jeśli zdefiniujesz właściwość nawigacji na jednym typie jednostki na końcu skojarzenia, nie musisz definiować właściwości nawigacji na typie jednostki na drugim końcu skojarzenia.
Typ danych zwracany przez właściwość nawigacji jest określany przez mnożenie jego zakończenia skojarzenia zdalnego. Załóżmy na przykład, że właściwość nawigacji OrdersNavProp istnieje w typie jednostki Klient i przechodzi do skojarzenia jeden do wielu między klientem a zamówieniem. Ponieważ zdalny koniec skojarzenia dla właściwości nawigacji ma wiele wartości (*), jego typ danych jest kolekcją (order). Podobnie jeśli właściwość nawigacji CustomerNavProp istnieje w typie jednostki Order, jej typ danych to Klient, ponieważ wielokrotność zdalnego zakończenia to jeden (1).
Element NavigationProperty może zawierać następujące elementy podrzędne (w podanej kolejności):
- Dokumentacja (zero lub jeden element)
- Elementy adnotacji (zero lub więcej elementów)
Odpowiednie atrybuty
W poniższej tabeli opisano atrybuty, które można zastosować do elementu NavigationProperty .
Nazwa atrybutu | Jest wymagany | Wartość |
---|---|---|
Nazwa/nazwisko | Tak | Nazwa właściwości nawigacji. |
Relacja | Tak | Nazwa skojarzenia, które znajduje się w zakresie modelu. |
ToRole | Tak | Koniec skojarzenia, na którym kończy się nawigacja. Wartość atrybutu ToRole musi być taka sama jak wartość jednego z atrybutów roli zdefiniowanych na jednym z końców skojarzenia (zdefiniowany w elemecie AssociationEnd). |
Zrole | Tak | Koniec skojarzenia, od którego rozpoczyna się nawigacja. Wartość atrybutu FromRole musi być taka sama jak wartość jednego z atrybutów roli zdefiniowanych na jednym z końców skojarzenia (zdefiniowanych w elemecie AssociationEnd). |
Uwaga
Do elementu NavigationProperty można zastosować dowolną liczbę atrybutów adnotacji (atrybuty niestandardowe XML). Jednak atrybuty niestandardowe mogą nie należeć do żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL. W pełni kwalifikowane nazwy dla dwóch atrybutów niestandardowych nie mogą być takie same.
Przykład
W poniższym przykładzie zdefiniowano typ jednostki (Book) z dwiema właściwościami nawigacji (PublishedBy i WrittenBy):
<EntityType Name="Book">
<Key>
<PropertyRef Name="ISBN" />
</Key>
<Property Type="String" Name="ISBN" Nullable="false" />
<Property Type="String" Name="Title" Nullable="false" />
<Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
<NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
FromRole="Book" ToRole="Publisher" />
<NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
FromRole="Book" ToRole="Author" />
</EntityType>
OnDelete, element (CSDL)
Element OnDelete w języku definicji schematu koncepcyjnego (CSDL) definiuje zachowanie połączone ze skojarzeniem. Jeśli atrybut Akcja jest ustawiony na Cascade na jednym końcu skojarzenia, powiązane typy jednostek na drugim końcu skojarzenia są usuwane po usunięciu typu jednostki na pierwszym końcu. Jeśli skojarzenie między dwoma typami jednostek jest relacją klucza podstawowego do klucza podstawowego, załadowany obiekt zależny zostanie usunięty, gdy obiekt główny na drugim końcu skojarzenia zostanie usunięty niezależnie od specyfikacji OnDelete .
Uwaga
Element OnDelete wpływa tylko na zachowanie środowiska uruchomieniowego aplikacji; nie ma wpływu na zachowanie w źródle danych. Zachowanie zdefiniowane w źródle danych powinno być takie samo jak zachowanie zdefiniowane w aplikacji.
Element OnDelete może zawierać następujące elementy podrzędne (w podanej kolejności):
- Dokumentacja (zero lub jeden element)
- Elementy adnotacji (zero lub więcej elementów)
Odpowiednie atrybuty
W poniższej tabeli opisano atrybuty, które można zastosować do elementu OnDelete .
Nazwa atrybutu | Jest wymagany | Wartość |
---|---|---|
Akcja | Tak | Kaskada lub Brak. W przypadku kaskady typy jednostek zależnych zostaną usunięte po usunięciu typu jednostki głównej. Jeśli brak, typy jednostek zależnych nie zostaną usunięte po usunięciu typu jednostki głównej. |
Uwaga
Do elementu Skojarzenie można zastosować dowolną liczbę atrybutów adnotacji (atrybuty niestandardowe XML). Jednak atrybuty niestandardowe mogą nie należeć do żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL. W pełni kwalifikowane nazwy dla dwóch atrybutów niestandardowych nie mogą być takie same.
Przykład
W poniższym przykładzie przedstawiono element skojarzenia , który definiuje skojarzenie CustomerOrders . Element OnDelete wskazuje, że wszystkie zamówienia powiązane z określonym Klientem i załadowane do obiektuContext zostaną usunięte po usunięciu klienta .
<Association Name="CustomerOrders">
<End Type="ExampleModel.Customer" Role="Customer" Multiplicity="1">
<OnDelete Action="Cascade" />
</End>
<End Type="ExampleModel.Order" Role="Order" Multiplicity="*" />
</Association>
Parameter, element (CSDL)
Element Parametr w języku definicji schematu koncepcyjnego (CSDL) może być elementem podrzędnym elementu FunctionImport lub elementu Function.
FunctionImport, aplikacja elementu
Element Parametr (jako element podrzędny elementu FunctionImport ) służy do definiowania parametrów wejściowych i wyjściowych dla importów funkcji zadeklarowanych w pliku CSDL.
Element Parametr może mieć następujące elementy podrzędne (w kolejności wymienionej):
- Dokumentacja (dozwolone są zero lub jeden element)
- Elementy adnotacji (zera lub więcej dozwolonych elementów)
Odpowiednie atrybuty
W poniższej tabeli opisano atrybuty, które można zastosować do elementu Parametr .
Nazwa atrybutu | Jest wymagany | Wartość |
---|---|---|
Nazwa/nazwisko | Tak | Nazwa parametru. |
Type | Tak | Typ parametru. Wartość musi być typem EDMSimpleType lub typem złożonym należącym do zakresu modelu. |
Tryb | Nie. | In, Out lub InOut w zależności od tego, czy parametr jest parametrem wejściowym, wyjściowym lub wejściowym/wyjściowym. |
MaxLength | Nie. | Maksymalna dozwolona długość parametru. |
Precyzja | Nie. | Precyzja parametru. |
Skaluj | Nie. | Skala parametru. |
SRID | Nie. | Identyfikator odwołania systemu przestrzennego. Prawidłowe tylko dla parametrów typów przestrzennych. Aby uzyskać więcej informacji, zobacz SRID i SRID (SQL Server). |
Uwaga
Do elementu Parametr można zastosować dowolną liczbę atrybutów adnotacji (atrybuty niestandardowe XML). Jednak atrybuty niestandardowe mogą nie należeć do żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL. W pełni kwalifikowane nazwy dla dwóch atrybutów niestandardowych nie mogą być takie same.
Przykład
W poniższym przykładzie przedstawiono element FunctionImport z jednym elementem podrzędnym Parametr . Funkcja akceptuje jeden parametr wejściowy i zwraca kolekcję typów jednostek.
<FunctionImport Name="GetStudentGrades"
EntitySet="StudentGrade"
ReturnType="Collection(SchoolModel.StudentGrade)">
<Parameter Name="StudentID" Mode="In" Type="Int32" />
</FunctionImport>
Aplikacja elementu funkcji
Element Parametr (jako element podrzędny elementu funkcji) definiuje parametry funkcji zdefiniowanych lub zadeklarowanych w modelu koncepcyjnym.
Element Parametr może mieć następujące elementy podrzędne (w kolejności wymienionej):
- Dokumentacja (zero lub jeden element)
- CollectionType (zero lub jeden element)
- ReferenceType (zero lub jeden element)
- Typ wiersza (zero lub jeden element)
Uwaga
Tylko jeden z elementów CollectionType, ReferenceType lub RowType może być elementem podrzędnym elementu Property .
- Elementy adnotacji (zera lub więcej dozwolonych elementów)
Uwaga
Elementy adnotacji muszą być wyświetlane po wszystkich innych elementach podrzędnych. Elementy adnotacji są dozwolone tylko w pliku CSDL w wersji 2 lub nowszej.
Odpowiednie atrybuty
W poniższej tabeli opisano atrybuty, które można zastosować do elementu Parametr .
Nazwa atrybutu | Jest wymagany | Wartość |
---|---|---|
Nazwa/nazwisko | Tak | Nazwa parametru. |
Type | Nie. | Typ parametru. Parametr może być dowolnym z następujących typów (lub kolekcji tych typów): EdmSimpleType typ jednostki typ złożony typ wiersza typ odwołania |
Nullable | Nie. | Prawda (wartość domyślna) lub Fałsz w zależności od tego, czy właściwość może mieć wartość null . |
DefaultValue | Nie. | Wartość domyślna właściwości. |
MaxLength | Nie. | Maksymalna długość wartości właściwości. |
FixedLength | Nie. | True lub False w zależności od tego, czy wartość właściwości będzie przechowywana jako ciąg o stałej długości. |
Precyzja | Nie. | Precyzja wartości właściwości. |
Skaluj | Nie. | Skala wartości właściwości. |
SRID | Nie. | Identyfikator odwołania systemu przestrzennego. Prawidłowe tylko dla właściwości typów przestrzennych. Aby uzyskać więcej informacji, zobacz SRID i SRID (SQL Server). |
Unicode | Nie. | True lub False w zależności od tego, czy wartość właściwości będzie przechowywana jako ciąg Unicode. |
Sortowanie | Nie. | Ciąg określający sekwencję sortowania, która ma być używana w źródle danych. |
Uwaga
Do elementu Parametr można zastosować dowolną liczbę atrybutów adnotacji (atrybuty niestandardowe XML). Jednak atrybuty niestandardowe mogą nie należeć do żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL. W pełni kwalifikowane nazwy dla dwóch atrybutów niestandardowych nie mogą być takie same.
Przykład
W poniższym przykładzie przedstawiono element funkcji , który używa jednego elementu podrzędnego Parametr do zdefiniowania parametru funkcji.
<Function Name="GetYearsEmployed" ReturnType="Edm.Int32">
<Parameter Name="Instructor" Type="SchoolModel.Person" />
<DefiningExpression>
Year(CurrentDateTime()) - Year(cast(Instructor.HireDate as DateTime))
</DefiningExpression>
</Function>
Principal, element (CSDL)
Element Principal w języku definicji schematu koncepcyjnego (CSDL) jest elementem podrzędnym elementu ReferentialConstraint, który definiuje główny koniec ograniczenia odwołania. Element ReferentialConstraint definiuje funkcje podobne do ograniczeń integralności referencyjnej w relacyjnej bazie danych. W taki sam sposób, w jaki kolumna (lub kolumny) z tabeli bazy danych może odwoływać się do klucza podstawowego innej tabeli, właściwość (lub właściwości) typu jednostki może odwoływać się do klucza jednostki innego typu. Typ jednostki, do którego odwołuje się odwołanie, jest nazywany głównym końcem ograniczenia. Typ jednostki odwołujący się do głównego końca jest nazywany zależnym końcem ograniczenia. Elementy PropertyRef służą do określania kluczy, do których odwołuje się koniec zależny.
Element Principal może zawierać następujące elementy podrzędne (w podanej kolejności):
- PropertyRef (co najmniej jeden element)
- Elementy adnotacji (zero lub więcej elementów)
Odpowiednie atrybuty
W poniższej tabeli opisano atrybuty, które można zastosować do elementu Principal .
Nazwa atrybutu | Jest wymagany | Wartość |
---|---|---|
Rola | Tak | Nazwa typu jednostki na głównym końcu skojarzenia. |
Uwaga
Do elementu Principal można zastosować dowolną liczbę atrybutów adnotacji (atrybuty niestandardowe XML). Jednak atrybuty niestandardowe mogą nie należeć do żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL. W pełni kwalifikowane nazwy dla dwóch atrybutów niestandardowych nie mogą być takie same.
Przykład
W poniższym przykładzie przedstawiono element ReferentialConstraint , który jest częścią definicji skojarzenia PublishedBy . Właściwość Id typu jednostki Wydawca stanowi główny koniec ograniczenia odwołania.
<Association Name="PublishedBy">
<End Type="BooksModel.Book" Role="Book" Multiplicity="*" >
</End>
<End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
<ReferentialConstraint>
<Principal Role="Publisher">
<PropertyRef Name="Id" />
</Principal>
<Dependent Role="Book">
<PropertyRef Name="PublisherId" />
</Dependent>
</ReferentialConstraint>
</Association>
Property, element (CSDL)
Element Property w języku definicji schematu koncepcyjnego (CSDL) może być elementem podrzędnym elementu EntityType, elementu ComplexType lub elementu RowType.
Aplikacje elementów EntityType i ComplexType
Elementy właściwości (jako elementy podrzędne elementów EntityType lub ComplexType ) definiują kształt i cechy danych, które będzie zawierać wystąpienie typu jednostki lub wystąpienie typu złożonego. Właściwości w modelu koncepcyjnym są analogiczne do właściwości zdefiniowanych w klasie. W ten sam sposób, w jaki właściwości klasy definiują kształt klasy i przenoszą informacje o obiektach, właściwości w modelu koncepcyjnym definiują kształt typu jednostki i przenoszą informacje o wystąpieniach typu jednostki.
Element Property może mieć następujące elementy podrzędne (w kolejności wymienionej):
- Documentation, element (zezwolono na zero lub jeden element)
- Elementy adnotacji (zera lub więcej dozwolonych elementów)
Do elementu Właściwości można zastosować następujące aspekty: Nullable, DefaultValue, MaxLength, FixedLength, Precision, Scale, Unicode, Collation, ConcurrencyMode. Aspekty to atrybuty XML, które zawierają informacje o sposobie przechowywania wartości właściwości w magazynie danych.
Uwaga
Aspekty można stosować tylko do właściwości typu EDMSimpleType.
Odpowiednie atrybuty
W poniższej tabeli opisano atrybuty, które można zastosować do elementu Property .
Nazwa atrybutu | Jest wymagany | Wartość |
---|---|---|
Nazwa/nazwisko | Tak | Nazwa właściwości. |
Type | Tak | Typ wartości właściwości. Typ wartości właściwości musi być typem EDMSimpleType lub typem złożonym (wskazywanym przez w pełni kwalifikowaną nazwę), który znajduje się w zakresie modelu. |
Nullable | Nie. | Prawda (wartość domyślna) lub Fałsz w zależności od tego, czy właściwość może mieć wartość null. [!UWAGA] |
> W pliku CSDL w wersji 1 właściwość typu złożonego musi mieć wartość Nullable="False" . |
||
DefaultValue | Nie. | Wartość domyślna właściwości. |
MaxLength | Nie. | Maksymalna długość wartości właściwości. |
FixedLength | Nie. | True lub False w zależności od tego, czy wartość właściwości będzie przechowywana jako ciąg o stałej długości. |
Precyzja | Nie. | Precyzja wartości właściwości. |
Skaluj | Nie. | Skala wartości właściwości. |
SRID | Nie. | Identyfikator odwołania systemu przestrzennego. Prawidłowe tylko dla właściwości typów przestrzennych. Aby uzyskać więcej informacji, zobacz SRID i SRID (SQL Server). |
Unicode | Nie. | True lub False w zależności od tego, czy wartość właściwości będzie przechowywana jako ciąg Unicode. |
Sortowanie | Nie. | Ciąg określający sekwencję sortowania, która ma być używana w źródle danych. |
ConcurrencyMode | Nie. | Brak (wartość domyślna) lub Naprawiono. Jeśli wartość jest ustawiona na Naprawiono, wartość właściwości będzie używana w optymistycznych testach współbieżności. |
Uwaga
Do elementu Property można zastosować dowolną liczbę atrybutów adnotacji (atrybuty niestandardowe XML). Jednak atrybuty niestandardowe mogą nie należeć do żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL. W pełni kwalifikowane nazwy dla dwóch atrybutów niestandardowych nie mogą być takie same.
Przykład
W poniższym przykładzie przedstawiono element EntityType z trzema elementami właściwości :
<EntityType Name="Book">
<Key>
<PropertyRef Name="ISBN" />
</Key>
<Property Type="String" Name="ISBN" Nullable="false" />
<Property Type="String" Name="Title" Nullable="false" />
<Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
<NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
FromRole="Book" ToRole="Publisher" />
<NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
FromRole="Book" ToRole="Author" />
</EntityType>
W poniższym przykładzie przedstawiono element ComplexType z pięcioma elementami właściwości :
<ComplexType Name="Address" >
<Property Type="String" Name="StreetAddress" Nullable="false" />
<Property Type="String" Name="City" Nullable="false" />
<Property Type="String" Name="StateOrProvince" Nullable="false" />
<Property Type="String" Name="Country" Nullable="false" />
<Property Type="String" Name="PostalCode" Nullable="false" />
</ComplexType>
Aplikacja elementu RowType
Elementy właściwości (jako elementy podrzędne elementu RowType ) definiują kształt i cechy danych, które mogą być przekazywane do lub zwracane z funkcji zdefiniowanej przez model.
Element Property może mieć dokładnie jeden z następujących elementów podrzędnych:
- Typ kolekcji
- Typ odwołania
- Typ wiersza
Element Property może mieć dowolne elementy adnotacji podrzędnej liczb.
Uwaga
Elementy adnotacji są dozwolone tylko w pliku CSDL w wersji 2 lub nowszej.
Odpowiednie atrybuty
W poniższej tabeli opisano atrybuty, które można zastosować do elementu Property .
Nazwa atrybutu | Jest wymagany | Wartość |
---|---|---|
Nazwa/nazwisko | Tak | Nazwa właściwości. |
Type | Tak | Typ wartości właściwości. |
Nullable | Nie. | Prawda (wartość domyślna) lub Fałsz w zależności od tego, czy właściwość może mieć wartość null. [!UWAGA] |
> W pliku CSDL w wersji 1 właściwość typu złożonego musi mieć Nullable="False" wartość . |
||
DefaultValue | Nie. | Wartość domyślna właściwości. |
MaxLength | Nie. | Maksymalna długość wartości właściwości. |
FixedLength | Nie. | True lub False w zależności od tego, czy wartość właściwości będzie przechowywana jako ciąg o stałej długości. |
Precyzja | Nie. | Precyzja wartości właściwości. |
Skaluj | Nie. | Skala wartości właściwości. |
SRID | Nie. | Identyfikator odwołania systemu przestrzennego. Prawidłowe tylko dla właściwości typów przestrzennych. Aby uzyskać więcej informacji, zobacz SRID i SRID (SQL Server). |
Unicode | Nie. | True lub False w zależności od tego, czy wartość właściwości będzie przechowywana jako ciąg Unicode. |
Sortowanie | Nie. | Ciąg określający sekwencję sortowania, która ma być używana w źródle danych. |
Uwaga
Do elementu Property można zastosować dowolną liczbę atrybutów adnotacji (atrybuty niestandardowe XML). Jednak atrybuty niestandardowe mogą nie należeć do żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL. W pełni kwalifikowane nazwy dla dwóch atrybutów niestandardowych nie mogą być takie same.
Przykład
W poniższym przykładzie przedstawiono elementy właściwości używane do definiowania kształtu zwracanego typu funkcji zdefiniowanej przez model.
<Function Name="LastNamesAfter">
<Parameter Name="someString" Type="Edm.String" />
<ReturnType>
<CollectionType>
<RowType>
<Property Name="FirstName" Type="Edm.String" Nullable="false" />
<Property Name="LastName" Type="Edm.String" Nullable="false" />
</RowType>
</CollectionType>
</ReturnType>
<DefiningExpression>
SELECT VALUE ROW(p.FirstName, p.LastName)
FROM SchoolEntities.People AS p
WHERE p.LastName >= somestring
</DefiningExpression>
</Function>
PropertyRef, element (CSDL)
Element PropertyRef w języku definicji schematu koncepcyjnego (CSDL) odwołuje się do właściwości typu jednostki, aby wskazać, że właściwość będzie wykonywać jedną z następujących ról:
- Część klucza jednostki (właściwość lub zestaw właściwości typu jednostki, który określa tożsamość). Co najmniej jeden element PropertyRef może służyć do definiowania klucza jednostki.
- Zależny lub główny koniec ograniczenia odwołania.
Element PropertyRef może zawierać tylko elementy adnotacji (zero lub więcej) jako elementy podrzędne.
Uwaga
Elementy adnotacji są dozwolone tylko w pliku CSDL w wersji 2 lub nowszej.
Odpowiednie atrybuty
W poniższej tabeli opisano atrybuty, które można zastosować do elementu PropertyRef .
Nazwa atrybutu | Jest wymagany | Wartość |
---|---|---|
Nazwa/nazwisko | Tak | Nazwa właściwości, do których odwołuje się odwołanie. |
Uwaga
Do elementu PropertyRef można zastosować dowolną liczbę atrybutów adnotacji (atrybuty niestandardowe XML). Jednak atrybuty niestandardowe mogą nie należeć do żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL. W pełni kwalifikowane nazwy dla dwóch atrybutów niestandardowych nie mogą być takie same.
Przykład
W poniższym przykładzie zdefiniowano typ jednostki (Book). Klucz jednostki jest definiowany przez odwołanie się do właściwości ISBN typu jednostki.
<EntityType Name="Book">
<Key>
<PropertyRef Name="ISBN" />
</Key>
<Property Type="String" Name="ISBN" Nullable="false" />
<Property Type="String" Name="Title" Nullable="false" />
<Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
<NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
FromRole="Book" ToRole="Publisher" />
<NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
FromRole="Book" ToRole="Author" />
</EntityType>
W następnym przykładzie dwa elementy PropertyRef są używane do wskazania, że dwie właściwości (Id i PublisherId) są główną i zależną końcem ograniczenia odwołania.
<Association Name="PublishedBy">
<End Type="BooksModel.Book" Role="Book" Multiplicity="*" >
</End>
<End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
<ReferentialConstraint>
<Principal Role="Publisher">
<PropertyRef Name="Id" />
</Principal>
<Dependent Role="Book">
<PropertyRef Name="PublisherId" />
</Dependent>
</ReferentialConstraint>
</Association>
ReferenceType, element (CSDL)
Element ReferenceType w języku definicji schematu koncepcyjnego (CSDL) określa odwołanie do typu jednostki. Element ReferenceType może być elementem podrzędnym następujących elementów:
- ReturnType (Funkcja)
- Parametr
- Typ kolekcji
Element ReferenceType jest używany podczas definiowania parametru lub zwracanego typu dla funkcji.
Element ReferenceType może zawierać następujące elementy podrzędne (w podanej kolejności):
- Dokumentacja (zero lub jeden element)
- Elementy adnotacji (zero lub więcej elementów)
Odpowiednie atrybuty
W poniższej tabeli opisano atrybuty, które można zastosować do elementu ReferenceType .
Nazwa atrybutu | Jest wymagany | Wartość |
---|---|---|
Type | Tak | Nazwa przywoływanego typu jednostki. |
Uwaga
Do elementu ReferenceType można zastosować dowolną liczbę atrybutów adnotacji (atrybuty niestandardowe XML). Jednak atrybuty niestandardowe mogą nie należeć do żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL. W pełni kwalifikowane nazwy dla dwóch atrybutów niestandardowych nie mogą być takie same.
Przykład
W poniższym przykładzie przedstawiono element ReferenceType używany jako element podrzędny elementu Parametr w funkcji zdefiniowanej przez model, która akceptuje odwołanie do typu jednostki Person :
<Function Name="GetYearsEmployed" ReturnType="Edm.Int32">
<Parameter Name="instructor">
<ReferenceType Type="SchoolModel.Person" />
</Parameter>
<DefiningExpression>
Year(CurrentDateTime()) - Year(cast(instructor.HireDate as DateTime))
</DefiningExpression>
</Function>
W poniższym przykładzie przedstawiono element ReferenceType używany jako element podrzędny elementu ReturnType (Function) w funkcji zdefiniowanej przez model, która zwraca odwołanie do typu jednostki Person :
<Function Name="GetPersonReference">
<Parameter Name="p" Type="SchoolModel.Person" />
<ReturnType>
<ReferenceType Type="SchoolModel.Person" />
</ReturnType>
<DefiningExpression>
REF(p)
</DefiningExpression>
</Function>
ReferentialConstraint, element (CSDL)
Element ReferentialConstraint w języku definicji schematu koncepcyjnego (CSDL) definiuje funkcje podobne do ograniczeń integralności referencyjnej w relacyjnej bazie danych. W taki sam sposób, w jaki kolumna (lub kolumny) z tabeli bazy danych może odwoływać się do klucza podstawowego innej tabeli, właściwość (lub właściwości) typu jednostki może odwoływać się do klucza jednostki innego typu. Typ jednostki, do którego odwołuje się odwołanie, jest nazywany głównym końcem ograniczenia. Typ jednostki odwołujący się do głównego końca jest nazywany zależnym końcem ograniczenia.
Jeśli klucz obcy uwidoczniony w jednym typie jednostki odwołuje się do właściwości innego typu jednostki, element ReferentialConstraint definiuje skojarzenie między dwoma typami jednostek. Ponieważ element ReferentialConstraint zawiera informacje o tym, jak są powiązane dwa typy jednostek, w języku specyfikacji mapowania (MSL) nie jest wymagany odpowiedni element AssociationSetMapping. Skojarzenie między dwoma typami jednostek, które nie mają uwidocznionych kluczy obcych, musi mieć odpowiedni element AssociationSetMapping w celu mapowania informacji o skojarzeniu do źródła danych.
Jeśli klucz obcy nie jest uwidoczniony dla typu jednostki, element ReferentialConstraint może zdefiniować ograniczenie klucza podstawowego do klucza podstawowego między typem jednostki a innym typem jednostki.
Element ReferentialConstraint może zawierać następujące elementy podrzędne (w podanej kolejności):
- Dokumentacja (zero lub jeden element)
- Podmiot zabezpieczeń (dokładnie jeden element)
- Zależne (dokładnie jeden element)
- Elementy adnotacji (zero lub więcej elementów)
Odpowiednie atrybuty
Element ReferentialConstraint może mieć dowolną liczbę atrybutów adnotacji (atrybuty niestandardowe XML). Jednak atrybuty niestandardowe mogą nie należeć do żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL. W pełni kwalifikowane nazwy dla dwóch atrybutów niestandardowych nie mogą być takie same.
Przykład
W poniższym przykładzie przedstawiono element ReferentialConstraint używany jako część definicji skojarzenia PublishedBy .
<Association Name="PublishedBy">
<End Type="BooksModel.Book" Role="Book" Multiplicity="*" >
</End>
<End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
<ReferentialConstraint>
<Principal Role="Publisher">
<PropertyRef Name="Id" />
</Principal>
<Dependent Role="Book">
<PropertyRef Name="PublisherId" />
</Dependent>
</ReferentialConstraint>
</Association>
ReturnType (Function) , element (CSDL)
Element ReturnType (Function) w języku definicji schematu koncepcyjnego (CSDL) określa typ zwracany dla funkcji zdefiniowanej w elemecie Funkcji. Typ zwracany funkcji można również określić za pomocą atrybutu ReturnType .
Typy zwracane mogą być dowolnymi typami EdmSimpleType, typem jednostki, typem złożonym, typem wiersza, typem ref lub kolekcją jednego z tych typów.
Zwracany typ funkcji można określić za pomocą atrybutu Type elementu ReturnType (Function) lub jednego z następujących elementów podrzędnych:
- Typ kolekcji
- Typ odwołania
- Typ wiersza
Uwaga
Model nie zostanie zweryfikowany, jeśli określisz typ zwracany przez funkcję z atrybutem Type elementu ReturnType (Function) i jednym z elementów podrzędnych.
Odpowiednie atrybuty
W poniższej tabeli opisano atrybuty, które można zastosować do elementu ReturnType (Function).
Nazwa atrybutu | Jest wymagany | Wartość |
---|---|---|
ReturnType | Nie. | Typ zwracany przez funkcję. |
Uwaga
Do elementu ReturnType (funkcja) można zastosować dowolną liczbę atrybutów adnotacji (atrybuty niestandardowe XML). Jednak atrybuty niestandardowe mogą nie należeć do żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL. W pełni kwalifikowane nazwy dla dwóch atrybutów niestandardowych nie mogą być takie same.
Przykład
W poniższym przykładzie użyto elementu funkcji do zdefiniowania funkcji, która zwraca liczbę lat, przez które książka została wydrukowana. Należy pamiętać, że typ zwracany jest określony przez atrybut Type elementu ReturnType (Function).
<Function Name="GetYearsInPrint">
<ReturnType Type=="Edm.Int32">
<Parameter Name="book" Type="BooksModel.Book" />
<DefiningExpression>
Year(CurrentDateTime()) - Year(cast(book.PublishedDate as DateTime))
</DefiningExpression>
</Function>
ReturnType (FunctionImport) , element (CSDL)
Element ReturnType (FunctionImport) w języku definicji schematu koncepcyjnego (CSDL) określa typ zwracany dla funkcji zdefiniowanej w elemecie FunctionImport. Typ zwracany funkcji można również określić za pomocą atrybutu ReturnType .
Typy zwracane mogą być dowolną kolekcją typu jednostki, typu złożonego lub typu EdmSimpleType,
Zwracany typ funkcji jest określony z atrybutem Type elementu ReturnType (FunctionImport).
Odpowiednie atrybuty
W poniższej tabeli opisano atrybuty, które można zastosować do elementu ReturnType (FunctionImport).
Nazwa atrybutu | Jest wymagany | Wartość |
---|---|---|
Type | Nie. | Typ zwracany przez funkcję. Wartość musi być kolekcją ComplexType, EntityType lub EDMSimpleType. |
EntitySet | Nie. | Jeśli funkcja zwraca kolekcję typów jednostek, wartość zestawu EntitySet musi być jednostką, do której należy kolekcja. W przeciwnym razie nie można użyć atrybutu EntitySet . |
Uwaga
Do elementu ReturnType (FunctionImport) można zastosować dowolną liczbę atrybutów adnotacji (atrybuty niestandardowe XML). Jednak atrybuty niestandardowe mogą nie należeć do żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL. W pełni kwalifikowane nazwy dla dwóch atrybutów niestandardowych nie mogą być takie same.
Przykład
W poniższym przykładzie użyto funkcjiImport, która zwraca książki i wydawcy. Należy pamiętać, że funkcja zwraca dwa zestawy wyników i dlatego określono dwa elementy ReturnType (FunctionImport).
<FunctionImport Name="GetBooksAndPublishers">
<ReturnType Type=="Collection(BooksModel.Book )" EntitySet=”Books”>
<ReturnType Type=="Collection(BooksModel.Publisher)" EntitySet=”Publishers”>
</FunctionImport>
RowType, element (CSDL)
Element RowType w języku definicji schematu koncepcyjnego (CSDL) definiuje nienazwaną strukturę jako parametr lub typ zwracany dla funkcji zdefiniowanej w modelu koncepcyjnym.
Element RowType może być elementem podrzędnym następujących elementów:
- Typ kolekcji
- Parametr
- ReturnType (Funkcja)
Element RowType może zawierać następujące elementy podrzędne (w podanej kolejności):
- Właściwość (co najmniej jedna)
- Elementy adnotacji (zero lub więcej)
Odpowiednie atrybuty
Do elementu RowType można zastosować dowolną liczbę atrybutów adnotacji (atrybuty niestandardowe XML). Jednak atrybuty niestandardowe mogą nie należeć do żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL. W pełni kwalifikowane nazwy dla dwóch atrybutów niestandardowych nie mogą być takie same.
Przykład
W poniższym przykładzie przedstawiono funkcję zdefiniowaną przez model, która używa elementu CollectionType, aby określić, że funkcja zwraca kolekcję wierszy (jak określono w elemecie RowType).
<Function Name="LastNamesAfter">
<Parameter Name="someString" Type="Edm.String" />
<ReturnType>
<CollectionType>
<RowType>
<Property Name="FirstName" Type="Edm.String" Nullable="false" />
<Property Name="LastName" Type="Edm.String" Nullable="false" />
</RowType>
</CollectionType>
</ReturnType>
<DefiningExpression>
SELECT VALUE ROW(p.FirstName, p.LastName)
FROM SchoolEntities.People AS p
WHERE p.LastName >= somestring
</DefiningExpression>
</Function>
Schema, element (CSDL)
Element Schemat jest elementem głównym definicji modelu koncepcyjnego. Zawiera definicje obiektów, funkcji i kontenerów tworzących model koncepcyjny.
Element Schemat może zawierać zero lub więcej z następujących elementów podrzędnych:
- Używanie
- EntityContainer
- Typ jednostki
- Typ wyliczenia
- Skojarzenie
- ComplexType
- Function
Element schematu może zawierać zero lub jeden element adnotacji.
Uwaga
Element funkcji i elementy adnotacji są dozwolone tylko w pliku CSDL w wersji 2 lub nowszej.
Element Schemat używa atrybutu Przestrzeń nazw do definiowania przestrzeni nazw dla typu jednostki, typu złożonego i obiektów skojarzenia w modelu koncepcyjnym. W przestrzeni nazw żadne dwa obiekty nie mogą mieć takiej samej nazwy. Przestrzenie nazw mogą obejmować wiele elementów schematu i wiele plików csdl.
Przestrzeń nazw modelu koncepcyjnego różni się od przestrzeni nazw XML elementu Schemat . Koncepcyjna przestrzeń nazw modelu (zdefiniowana przez atrybut Przestrzeni nazw ) jest kontenerem logicznym dla typów jednostek, typów złożonych i typów skojarzeń. Przestrzeń nazw XML (wskazywana przez atrybut xmlns ) elementu Schemat jest domyślną przestrzenią nazw dla elementów podrzędnych i atrybutów elementu Schemat . Przestrzenie nazw XML formularza https://schemas.microsoft.com/ado/YYYY/MM/edm
(gdzie RRRR i MM reprezentują odpowiednio rok i miesiąc) są zarezerwowane dla języka CSDL. Elementy niestandardowe i atrybuty nie mogą znajdować się w przestrzeniach nazw, które mają ten formularz.
Odpowiednie atrybuty
W poniższej tabeli opisano atrybuty, które można zastosować do elementu Schemat .
Nazwa atrybutu | Jest wymagany | Wartość |
---|---|---|
Przestrzeń nazw | Tak | Przestrzeń nazw modelu koncepcyjnego. Wartość atrybutu przestrzeń nazw jest używana do utworzenia w pełni kwalifikowanej nazwy typu. Jeśli na przykład jednostka EntityType o nazwie Customer znajduje się w przestrzeni nazw Simple.Example.Model, w pełni kwalifikowana nazwa EntityType to SimpleExampleModel.Customer. Następujące ciągi nie mogą być używane jako wartość atrybutu Przestrzeń nazw : System, Przejściowy lub Edm. Wartość atrybutu Przestrzeni nazw nie może być taka sama jak wartość atrybutu Przestrzeń nazw w elemecie Schemat SSDL. |
Alias | Nie. | Identyfikator używany zamiast nazwy przestrzeni nazw. Jeśli na przykład typ EntityType o nazwie Customer znajduje się w przestrzeni nazw Simple.Example.Model, a wartość atrybutu Alias to Model, możesz użyć parametru Model.Customer jako w pełni kwalifikowanej nazwy EntityType. |
Uwaga
Do elementu Schemat można zastosować dowolną liczbę atrybutów adnotacji (atrybuty niestandardowe XML). Jednak atrybuty niestandardowe mogą nie należeć do żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL. W pełni kwalifikowane nazwy dla dwóch atrybutów niestandardowych nie mogą być takie same.
Przykład
W poniższym przykładzie przedstawiono element Schemat zawierający element EntityContainer , dwa elementy EntityType i jeden element skojarzenia .
<Schema xmlns="https://schemas.microsoft.com/ado/2009/11/edm"
xmlns:cg="https://schemas.microsoft.com/ado/2009/11/codegeneration"
xmlns:store="https://schemas.microsoft.com/ado/2009/11/edm/EntityStoreSchemaGenerator"
Namespace="ExampleModel" Alias="Self">
<EntityContainer Name="ExampleModelContainer">
<EntitySet Name="Customers"
EntityType="ExampleModel.Customer" />
<EntitySet Name="Orders" EntityType="ExampleModel.Order" />
<AssociationSet
Name="CustomerOrder"
Association="ExampleModel.CustomerOrders">
<End Role="Customer" EntitySet="Customers" />
<End Role="Order" EntitySet="Orders" />
</AssociationSet>
</EntityContainer>
<EntityType Name="Customer">
<Key>
<PropertyRef Name="CustomerId" />
</Key>
<Property Type="Int32" Name="CustomerId" Nullable="false" />
<Property Type="String" Name="Name" Nullable="false" />
<NavigationProperty
Name="Orders"
Relationship="ExampleModel.CustomerOrders"
FromRole="Customer" ToRole="Order" />
</EntityType>
<EntityType Name="Order">
<Key>
<PropertyRef Name="OrderId" />
</Key>
<Property Type="Int32" Name="OrderId" Nullable="false" />
<Property Type="Int32" Name="ProductId" Nullable="false" />
<Property Type="Int32" Name="Quantity" Nullable="false" />
<NavigationProperty
Name="Customer"
Relationship="ExampleModel.CustomerOrders"
FromRole="Order" ToRole="Customer" />
<Property Type="Int32" Name="CustomerId" Nullable="false" />
</EntityType>
<Association Name="CustomerOrders">
<End Type="ExampleModel.Customer"
Role="Customer" Multiplicity="1" />
<End Type="ExampleModel.Order"
Role="Order" Multiplicity="*" />
<ReferentialConstraint>
<Principal Role="Customer">
<PropertyRef Name="CustomerId" />
</Principal>
<Dependent Role="Order">
<PropertyRef Name="CustomerId" />
</Dependent>
</ReferentialConstraint>
</Association>
</Schema>
TypeRef, element (CSDL)
Element TypeRef w języku definicji schematu koncepcyjnego (CSDL) zawiera odwołanie do istniejącego nazwanego typu. Element TypeRef może być elementem podrzędnym elementu CollectionType, który służy do określenia, że funkcja ma kolekcję jako parametr lub typ zwracany.
Element TypeRef może mieć następujące elementy podrzędne (w podanej kolejności):
- Dokumentacja (zero lub jeden element)
- Elementy adnotacji (zero lub więcej elementów)
Odpowiednie atrybuty
W poniższej tabeli opisano atrybuty, które można zastosować do elementu TypeRef . Należy pamiętać, że atrybuty DefaultValue, MaxLength, FixedLength, Precision, Scale, Unicode i Collation mają zastosowanie tylko do typów EDMSimpleTypes.
Nazwa atrybutu | Jest wymagany | Wartość |
---|---|---|
Type | Nie. | Nazwa przywoływanego typu. |
Nullable | Nie. | Prawda (wartość domyślna) lub Fałsz w zależności od tego, czy właściwość może mieć wartość null. [!UWAGA] |
> W pliku CSDL w wersji 1 właściwość typu złożonego musi mieć Nullable="False" wartość . |
||
DefaultValue | Nie. | Wartość domyślna właściwości. |
MaxLength | Nie. | Maksymalna długość wartości właściwości. |
FixedLength | Nie. | True lub False w zależności od tego, czy wartość właściwości będzie przechowywana jako ciąg o stałej długości. |
Precyzja | Nie. | Precyzja wartości właściwości. |
Skaluj | Nie. | Skala wartości właściwości. |
SRID | Nie. | Identyfikator odwołania systemu przestrzennego. Prawidłowe tylko dla właściwości typów przestrzennych. Aby uzyskać więcej informacji, zobacz SRID i SRID (SQL Server). |
Unicode | Nie. | True lub False w zależności od tego, czy wartość właściwości będzie przechowywana jako ciąg Unicode. |
Sortowanie | Nie. | Ciąg określający sekwencję sortowania, która ma być używana w źródle danych. |
Uwaga
Do elementu CollectionType można zastosować dowolną liczbę atrybutów adnotacji (atrybuty niestandardowe XML). Jednak atrybuty niestandardowe mogą nie należeć do żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL. W pełni kwalifikowane nazwy dla dwóch atrybutów niestandardowych nie mogą być takie same.
Przykład
W poniższym przykładzie pokazano funkcję zdefiniowaną przez model, która używa elementu TypeRef (jako element podrzędny elementu CollectionType), aby określić, że funkcja akceptuje kolekcję typów jednostek Dział.
<Function Name="GetAvgBudget">
<Parameter Name="Departments">
<CollectionType>
<TypeRef Type="SchoolModel.Department"/>
</CollectionType>
</Parameter>
<ReturnType Type="Collection(Edm.Decimal)"/>
<DefiningExpression>
SELECT VALUE AVG(d.Budget) FROM Departments AS d
</DefiningExpression>
</Function>
Using, element (CSDL)
Element Using w języku definicji schematu koncepcyjnego (CSDL) importuje zawartość modelu koncepcyjnego, który istnieje w innej przestrzeni nazw. Ustawiając wartość atrybutu Przestrzeń nazw , można odwoływać się do typów jednostek, typów złożonych i typów skojarzeń zdefiniowanych w innym modelu koncepcyjnym. Więcej niż jeden element Using może być elementem podrzędnym elementu Schemat .
Uwaga
Element Using w języku CSDL nie działa dokładnie tak jak instrukcja using w języku programowania. Importując przestrzeń nazw z instrukcją using w języku programowania, nie ma to wpływu na obiekty w oryginalnej przestrzeni nazw. W języku CSDL zaimportowana przestrzeń nazw może zawierać typ jednostki pochodzący z typu jednostki w oryginalnej przestrzeni nazw. Może to mieć wpływ na zestawy jednostek zadeklarowane w oryginalnej przestrzeni nazw.
Element Using może mieć następujące elementy podrzędne:
- Dokumentacja (dozwolone są zero lub jeden element)
- Elementy adnotacji (zera lub więcej dozwolonych elementów)
Odpowiednie atrybuty
W poniższej tabeli opisano atrybuty, które można zastosować do elementu Using .
Nazwa atrybutu | Jest wymagany | Wartość |
---|---|---|
Przestrzeń nazw | Tak | Nazwa zaimportowanej przestrzeni nazw. |
Alias | Tak | Identyfikator używany zamiast nazwy przestrzeni nazw. Mimo że ten atrybut jest wymagany, nie jest wymagany, aby był używany zamiast nazwy przestrzeni nazw do kwalifikowania nazw obiektów. |
Uwaga
Do elementu Using można zastosować dowolną liczbę atrybutów adnotacji (atrybuty niestandardowe XML). Jednak atrybuty niestandardowe mogą nie należeć do żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL. W pełni kwalifikowane nazwy dla dwóch atrybutów niestandardowych nie mogą być takie same.
Przykład
W poniższym przykładzie przedstawiono element Using używany do importowania przestrzeni nazw zdefiniowanej gdzie indziej. Należy pamiętać, że przestrzeń nazw pokazanego elementu Schemat to BooksModel
. Właściwość EntityType Address
Publisher
jest typem złożonym zdefiniowanym w ExtendedBooksModel
przestrzeni nazw (importowanym z elementem Using).
<Schema xmlns="https://schemas.microsoft.com/ado/2009/11/edm"
xmlns:cg="https://schemas.microsoft.com/ado/2009/11/codegeneration"
xmlns:store="https://schemas.microsoft.com/ado/2009/11/edm/EntityStoreSchemaGenerator"
Namespace="BooksModel" Alias="Self">
<Using Namespace="BooksModel.Extended" Alias="BMExt" />
<EntityContainer Name="BooksContainer" >
<EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
</EntityContainer>
<EntityType Name="Publisher">
<Key>
<PropertyRef Name="Id" />
</Key>
<Property Type="Int32" Name="Id" Nullable="false" />
<Property Type="String" Name="Name" Nullable="false" />
<Property Type="BMExt.Address" Name="Address" Nullable="false" />
</EntityType>
</Schema>
Atrybuty adnotacji (CSDL)
Atrybuty adnotacji w języku definicji schematu koncepcyjnego (CSDL) to niestandardowe atrybuty XML w modelu koncepcyjnym. Oprócz prawidłowej struktury XML następujące atrybuty adnotacji muszą mieć wartość true:
- Atrybuty adnotacji nie mogą znajdować się w żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL.
- Do danego elementu CSDL można zastosować więcej niż jeden atrybut adnotacji.
- W pełni kwalifikowane nazwy wszystkich dwóch atrybutów adnotacji nie mogą być takie same.
Atrybuty adnotacji mogą służyć do udostępniania dodatkowych metadanych dotyczących elementów w modelu koncepcyjnym. Dostęp do metadanych zawartych w elementach adnotacji można uzyskać w czasie wykonywania przy użyciu klas w przestrzeni nazw System.Data.Metadata.Edm.
Przykład
W poniższym przykładzie przedstawiono element EntityType z atrybutem adnotacji (CustomAttribute). W przykładzie przedstawiono również element adnotacji zastosowany do elementu typu jednostki.
<Schema Namespace="SchoolModel" Alias="Self"
xmlns:annotation="https://schemas.microsoft.com/ado/2009/02/edm/annotation"
xmlns="https://schemas.microsoft.com/ado/2009/11/edm">
<EntityContainer Name="SchoolEntities" annotation:LazyLoadingEnabled="true">
<EntitySet Name="People" EntityType="SchoolModel.Person" />
</EntityContainer>
<EntityType Name="Person" xmlns:p="http://CustomNamespace.com"
p:CustomAttribute="Data here.">
<Key>
<PropertyRef Name="PersonID" />
</Key>
<Property Name="PersonID" Type="Int32" Nullable="false"
annotation:StoreGeneratedPattern="Identity" />
<Property Name="LastName" Type="String" Nullable="false"
MaxLength="50" Unicode="true" FixedLength="false" />
<Property Name="FirstName" Type="String" Nullable="false"
MaxLength="50" Unicode="true" FixedLength="false" />
<Property Name="HireDate" Type="DateTime" />
<Property Name="EnrollmentDate" Type="DateTime" />
<p:CustomElement>
Custom metadata.
</p:CustomElement>
</EntityType>
</Schema>
Poniższy kod pobiera metadane w atrybucie adnotacji i zapisuje je w konsoli:
EdmItemCollection collection = new EdmItemCollection("School.csdl");
MetadataWorkspace workspace = new MetadataWorkspace();
workspace.RegisterItemCollection(collection);
EdmType contentType;
workspace.TryGetType("Person", "SchoolModel", DataSpace.CSpace, out contentType);
if (contentType.MetadataProperties.Contains("http://CustomNamespace.com:CustomAttribute"))
{
MetadataProperty annotationProperty =
contentType.MetadataProperties["http://CustomNamespace.com:CustomAttribute"];
object annotationValue = annotationProperty.Value;
Console.WriteLine(annotationValue.ToString());
}
Powyższy kod zakłada, że School.csdl
plik znajduje się w katalogu wyjściowym projektu i że dodano następujące Imports
instrukcje i Using
do projektu:
using System.Data.Metadata.Edm;
Elementy adnotacji (CSDL)
Elementy adnotacji w języku definicji schematu koncepcyjnego (CSDL) to niestandardowe elementy XML w modelu koncepcyjnym. Oprócz prawidłowej struktury XML muszą być spełnione następujące elementy adnotacji:
- Elementy adnotacji nie mogą znajdować się w żadnej przestrzeni nazw XML zarezerwowanej dla języka CSDL.
- Więcej niż jeden element adnotacji może być elementem podrzędnym danego elementu CSDL.
- W pełni kwalifikowane nazwy wszystkich dwóch elementów adnotacji nie mogą być takie same.
- Elementy adnotacji muszą pojawić się po wszystkich innych elementach podrzędnych danego elementu CSDL.
Elementy adnotacji mogą służyć do udostępniania dodatkowych metadanych dotyczących elementów w modelu koncepcyjnym. Począwszy od programu .NET Framework w wersji 4, metadane zawarte w elementach adnotacji mogą być dostępne w czasie wykonywania przy użyciu klas w przestrzeni nazw System.Data.Metadata.Edm.
Przykład
W poniższym przykładzie przedstawiono element EntityType z elementem adnotacji (CustomElement). W przykładzie pokazano również atrybut adnotacji zastosowany do elementu typu jednostki.
<Schema Namespace="SchoolModel" Alias="Self"
xmlns:annotation="https://schemas.microsoft.com/ado/2009/02/edm/annotation"
xmlns="https://schemas.microsoft.com/ado/2009/11/edm">
<EntityContainer Name="SchoolEntities" annotation:LazyLoadingEnabled="true">
<EntitySet Name="People" EntityType="SchoolModel.Person" />
</EntityContainer>
<EntityType Name="Person" xmlns:p="http://CustomNamespace.com"
p:CustomAttribute="Data here.">
<Key>
<PropertyRef Name="PersonID" />
</Key>
<Property Name="PersonID" Type="Int32" Nullable="false"
annotation:StoreGeneratedPattern="Identity" />
<Property Name="LastName" Type="String" Nullable="false"
MaxLength="50" Unicode="true" FixedLength="false" />
<Property Name="FirstName" Type="String" Nullable="false"
MaxLength="50" Unicode="true" FixedLength="false" />
<Property Name="HireDate" Type="DateTime" />
<Property Name="EnrollmentDate" Type="DateTime" />
<p:CustomElement>
Custom metadata.
</p:CustomElement>
</EntityType>
</Schema>
Poniższy kod pobiera metadane w elemecie adnotacji i zapisuje je w konsoli:
EdmItemCollection collection = new EdmItemCollection("School.csdl");
MetadataWorkspace workspace = new MetadataWorkspace();
workspace.RegisterItemCollection(collection);
EdmType contentType;
workspace.TryGetType("Person", "SchoolModel", DataSpace.CSpace, out contentType);
if (contentType.MetadataProperties.Contains("http://CustomNamespace.com:CustomElement"))
{
MetadataProperty annotationProperty =
contentType.MetadataProperties["http://CustomNamespace.com:CustomElement"];
object annotationValue = annotationProperty.Value;
Console.WriteLine(annotationValue.ToString());
}
Powyższy kod zakłada, że plik School.csdl znajduje się w katalogu wyjściowym projektu i że dodano następujące Imports
instrukcje i Using
do projektu:
using System.Data.Metadata.Edm;
Typy modeli koncepcyjnych (CSDL)
Język definicji schematu koncepcyjnego (CSDL) obsługuje zestaw abstrakcyjnych typów danych pierwotnych o nazwie EDMSimpleTypes, które definiują właściwości w modelu koncepcyjnym. EDMSimpleTypes to serwery proxy typów danych pierwotnych obsługiwanych w środowisku magazynu lub hostingu.
W poniższej tabeli wymieniono typy danych pierwotnych, które są obsługiwane przez plik CSDL. Tabela zawiera również listę aspektów, które można zastosować do każdego typu EDMSimpleType.
EDMSimpleType | opis | Odpowiednie aspekty |
---|---|---|
Edm.Binary | Zawiera dane binarne. | MaxLength, FixedLength, Nullable, Default |
Edm.Boolean | Zawiera wartość true lub false. | Wartość null, wartość domyślna |
Edm.Byte | Zawiera niepodpisaną wartość całkowitą 8-bitową. | Precyzja, dopuszczana do wartości null, wartość domyślna |
Edm.DateTime | Reprezentuje datę i godzinę. | Precyzja, dopuszczana do wartości null, wartość domyślna |
Edm.DateTimeOffset | Zawiera datę i godzinę jako przesunięcie w minutach od GMT. | Precyzja, dopuszczana do wartości null, wartość domyślna |
Edm.Decimal | Zawiera wartość liczbową o stałej precyzji i skali. | Precyzja, dopuszczana do wartości null, wartość domyślna |
Edm.Double | Zawiera liczbę zmiennoprzecinkową z 15-cyfrową precyzją | Precyzja, dopuszczana do wartości null, wartość domyślna |
Edm.Float | Zawiera liczbę zmiennoprzecinkową z 7-cyfrową precyzją. | Precyzja, dopuszczana do wartości null, wartość domyślna |
Edm.Guid | Zawiera unikatowy identyfikator 16 bajtów. | Precyzja, dopuszczana do wartości null, wartość domyślna |
Edm.Int16 | Zawiera podpisaną 16-bitową wartość całkowitą. | Precyzja, dopuszczana do wartości null, wartość domyślna |
Edm.Int32 | Zawiera podpisaną 32-bitową wartość całkowitą. | Precyzja, dopuszczana do wartości null, wartość domyślna |
Edm.Int64 | Zawiera podpisaną 64-bitową wartość całkowitą. | Precyzja, dopuszczana do wartości null, wartość domyślna |
Edm.SByte | Zawiera podpisaną 8-bitową wartość całkowitą. | Precyzja, dopuszczana do wartości null, wartość domyślna |
Edm.String | Zawiera dane znaków. | Unicode, FixedLength, MaxLength, Collation, Precision, Nullable, Default |
Edm.Time | Zawiera godzinę dnia. | Precyzja, dopuszczana do wartości null, wartość domyślna |
Edm.Geography | Nullable, Default, SRID | |
Edm.GeographyPoint | Nullable, Default, SRID | |
Edm.GeographyLineString | Nullable, Default, SRID | |
Edm.GeographyPolygon | Nullable, Default, SRID | |
Edm.GeographyMultiPoint | Nullable, Default, SRID | |
Edm.GeographyMultiLineString | Nullable, Default, SRID | |
Edm.GeographyMultiPolygon | Nullable, Default, SRID | |
Edm.GeographyCollection | Nullable, Default, SRID | |
Edm.Geometry | Nullable, Default, SRID | |
Edm.GeometryPoint | Nullable, Default, SRID | |
Edm.GeometryLineString | Nullable, Default, SRID | |
Edm.GeometryPolygon | Nullable, Default, SRID | |
Edm.GeometryMultiPoint | Nullable, Default, SRID | |
Edm.GeometryMultiLineString | Nullable, Default, SRID | |
Edm.GeometryMultiPolygon | Nullable, Default, SRID | |
Edm.GeometryCollection | Nullable, Default, SRID |
Aspekty (CSDL)
Aspekty w języku definicji schematu koncepcyjnego (CSDL) reprezentują ograniczenia właściwości typów jednostek i typów złożonych. Aspekty są wyświetlane jako atrybuty XML w następujących elementach CSDL:
- Właściwości
- TypeRef
- Parametr
W poniższej tabeli opisano aspekty obsługiwane w języku CSDL. Wszystkie aspekty są opcjonalne. Niektóre aspekty wymienione poniżej są używane przez program Entity Framework podczas generowania bazy danych na podstawie modelu koncepcyjnego.
Uwaga
Aby uzyskać informacje o typach danych w modelu koncepcyjnym, zobacz Koncepcyjne typy modeli (CSDL).
Faseta | opis | Dotyczy | Używane do generowania bazy danych | Używane przez środowisko uruchomieniowe |
---|---|---|---|---|
Sortowanie | Określa sekwencję sortowania (lub sekwencję sortowania), która ma być używana podczas wykonywania operacji porównywania i porządkowania wartości właściwości. | Edm.String | Tak | Nie. |
ConcurrencyMode | Wskazuje, że wartość właściwości powinna być używana na potrzeby optymistycznych testów współbieżności. | Wszystkie właściwości EDMSimpleType | Nie. | Tak |
Wartość domyślna | Określa wartość domyślną właściwości, jeśli nie podano żadnej wartości podczas tworzenia wystąpienia. | Wszystkie właściwości EDMSimpleType | Tak | Tak |
FixedLength | Określa, czy długość wartości właściwości może się różnić. | Edm.Binary, Edm.String | Tak | Nie. |
MaxLength | Określa maksymalną długość wartości właściwości. | Edm.Binary, Edm.String | Tak | Nie. |
Nullable | Określa, czy właściwość może mieć wartość null . | Wszystkie właściwości EDMSimpleType | Tak | Tak |
Precyzja | W przypadku właściwości typu Decimal określa liczbę cyfr, które może mieć wartość właściwości. Dla właściwości typu Time, DateTime i DateTimeOffset określa liczbę cyfr dla części ułamkowej sekund wartości właściwości. | Edm.DateTime, Edm.DateTimeOffset, Edm.Decimal, Edm.Time | Tak | Nie. |
Skaluj | Określa liczbę cyfr po prawej stronie punktu dziesiętnego dla wartości właściwości. | Edm.Decimal | Tak | Nie. |
SRID | Określa identyfikator systemu referencyjnego systemu przestrzennego. Aby uzyskać więcej informacji, zobacz SRID i SRID (SQL Server). | Edm.Geography, Edm.GeographyPoint, Edm.GeographyLineString, Edm.GeographyPolygon, Edm.GeographyMultiPoint, Edm.GeographyMultiLineString, Edm.GeographyMultiPolygon, Edm.GeographyCollection, Edm.Geometry, Edm.GeometryPoint, Edm.GeometryLineString, Edm.GeometryPolygon, Edm.GeometryMultiPoint, Edm.GeometryMultiLineString, Edm.GeometryMultiPolygon, Edm.GeometryCollection | Nie. | Tak |
Unicode | Wskazuje, czy wartość właściwości jest przechowywana jako Unicode. | Edm.String | Tak | Tak |
Uwaga
Podczas generowania bazy danych na podstawie modelu koncepcyjnego Kreator generowania bazy danych rozpozna wartość atrybutu StoreGeneratedPattern w elemecie Property, jeśli znajduje się w następującej przestrzeni nazw: https://schemas.microsoft.com/ado/2009/02/edm/annotation
. Obsługiwane wartości atrybutu to Identity i Computed. Wartość Identity spowoduje wygenerowanie kolumny bazy danych z wartością tożsamości wygenerowaną w bazie danych. Wartość obliczona spowoduje wygenerowanie kolumny z wartością obliczoną w bazie danych.
Przykład
W poniższym przykładzie przedstawiono aspekty zastosowane do właściwości typu jednostki:
<EntityType Name="Product">
<Key>
<PropertyRef Name="ProductId" />
</Key>
<Property Type="Int32"
Name="ProductId" Nullable="false"
a:StoreGeneratedPattern="Identity"
xmlns:a="https://schemas.microsoft.com/ado/2009/02/edm/annotation" />
<Property Type="String"
Name="ProductName"
Nullable="false"
MaxLength="50" />
<Property Type="String"
Name="Location"
Nullable="true"
MaxLength="25" />
</EntityType>