typ złożony
Typ złożony to szablon do definiowania rozbudowanych, ustrukturyzowanych właściwości typów jednostek lub innych typów złożonych. Każdy szablon zawiera następujące elementy:
Unikatowa nazwa. (Wymagane)
Uwaga
Nazwa typu złożonego nie może być taka sama jak nazwa typu jednostki w tej samej przestrzeni nazw.
Dane w postaci co najmniej jednej właściwości. (opcjonalnie)
Uwaga
Właściwość typu złożonego może być innym typem złożonym.
Typ złożony jest podobny do typu jednostki, w przypadku którego typ złożony może przenosić ładunek danych w postaci właściwości typu pierwotnego lub innych typów złożonych. Istnieją jednak pewne kluczowe różnice między typami złożonymi i typami jednostek:
Typy złożone nie mają tożsamości 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 i dlatego nie można zdefiniować właściwości nawigacji w typach złożonych.
Przykład
ADO.NET Entity Framework używa języka specyficznego dla domeny (DSL) nazywanego koncepcyjnym językiem definicji schematu (CSDL) do definiowania modeli koncepcyjnych. Poniższy plik CSDL definiuje typ złożony, Adres z właściwościami StreetAddress
typu pierwotnego , , 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 Address
złożony (powyżej) jako właściwość typu jednostki, należy zadeklarować typ właściwości w definicji typu jednostki. Poniższy plik CSDL deklaruje Address
właściwość 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>