Kluczowe założenia modelu danych jednostki
Model danych jednostki (EDM) używa trzech kluczowych pojęć, aby opisać strukturę danych: typ jednostki, typ skojarzenia i właściwość. Są to najważniejsze pojęcia opisujące strukturę danych w dowolnej implementacji modułu EDM.
Typ jednostki
Typ jednostki to podstawowy blok konstrukcyjny opisujący strukturę danych za pomocą modelu danych jednostki. W modelu koncepcyjnym typy jednostek są tworzone na podstawie właściwości i opisują strukturę pojęć najwyższego poziomu, takich jak klienci i zamówienia w aplikacji biznesowej. W ten sam sposób, w jaki definicja klasy w programie komputerowym jest szablonem dla wystąpień klasy, typ jednostki jest szablonem dla jednostek. Jednostka reprezentuje określony obiekt (taki jak określony klient lub zamówienie). Każda jednostka musi mieć unikatowy klucz jednostki w zestawie jednostek. Zestaw jednostek to kolekcja wystąpień określonego typu jednostki. Zestawy jednostek (i zestawy skojarzeń) są logicznie grupowane w kontenerze jednostki.
Dziedziczenie jest obsługiwane w przypadku typów jednostek: oznacza to, że jeden typ jednostki może pochodzić z innego. Aby uzyskać więcej informacji, zobacz Model danych jednostki: dziedziczenie.
Typ skojarzenia
Typ skojarzenia (nazywany również skojarzeniem) jest podstawowym blokiem konstrukcyjnym opisującym relacje w modelu danych jednostki. W modelu koncepcyjnym skojarzenie reprezentuje relację między dwoma typami jednostek (takimi jak Klient i Zamówienie). Każde skojarzenie ma dwa końce skojarzenia, które określają typy jednostek zaangażowanych w skojarzenie. Każde zakończenie skojarzenia określa również wielość skojarzeń , która wskazuje liczbę jednostek, które mogą znajdować się na tym końcu skojarzenia. Wielokrotność zakończenia skojarzenia może mieć wartość jedną (1), zero lub jedną (0..1) lub wiele (*). Dostęp do jednostek 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. Aby uzyskać więcej informacji, zobacz właściwość klucza obcego.
W aplikacji wystąpienie skojarzenia reprezentuje określone skojarzenie (takie jak skojarzenie między wystąpieniem klienta i wystąpieniami zamówienia). Wystąpienia skojarzeń są logicznie grupowane w zestawie skojarzeń. Zestawy skojarzeń (i zestawy jednostek) są logicznie grupowane w kontenerze jednostki.
Właściwości
Typy jednostek zawierają właściwości definiujące ich strukturę i cechy. Na przykład typ jednostki Klient może mieć właściwości, takie jak CustomerId, Name i Address.
Właściwości w modelu koncepcyjnym są analogiczne do właściwości zdefiniowanych w klasie w programie komputerowym. 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.
Właściwość może zawierać dane pierwotne (takie jak ciąg, liczba całkowita lub wartość logiczna) lub dane ustrukturyzowane (takie jak typ złożony). Aby uzyskać więcej informacji, zobacz Model danych jednostki: typy danych pierwotnych.
Reprezentacje modelu koncepcyjnego
Model koncepcyjny to konkretna reprezentacja struktury niektórych danych jako jednostek i relacji. Jednym ze sposobów reprezentowania modelu koncepcyjnego jest diagram. Na poniższym diagramie przedstawiono model koncepcyjny z trzema typami jednostek (Book
, , i Author
) i dwoma skojarzeniami (PublishedBy
i WrittenBy
Publisher
):
Ta reprezentacja ma jednak pewne braki, jeśli chodzi o przekazywanie pewnych szczegółów dotyczących modelu. Na przykład informacje o typie właściwości i zestawie jednostek nie są przekazywane na diagramie. Bogactwo modelu koncepcyjnego można przekazać bardziej wyraźnie za pomocą języka specyficznego dla domeny (DSL). W ADO.NET Entity Framework do definiowania modeli koncepcyjnych używany jest język DSL oparty na języku XML nazywany językiem definicji schematu koncepcyjnego (CSDL). Poniżej przedstawiono definicję CSDL modelu koncepcyjnego na powyższym diagramie:
<Schema xmlns="http://schemas.microsoft.com/ado/2008/09/edm"
xmlns:cg="http://schemas.microsoft.com/ado/2006/04/codegeneration"
xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator"
Namespace="BooksModel" Alias="Self">
<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>
<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>
<EntityType Name="Publisher">
<Key>
<PropertyRef Name="Id" />
</Key>
<Property Type="Int32" Name="Id" Nullable="false" />
<Property Type="String" Name="Name" Nullable="false" />
<Property Type="String" Name="Address" Nullable="false" />
<NavigationProperty Name="Books" Relationship="BooksModel.PublishedBy"
FromRole="Publisher" ToRole="Book" />
</EntityType>
<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>
<Association Name="PublishedBy">
<End Type="BooksModel.Book" Role="Book" Multiplicity="*" />
<End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
</Association>
<Association Name="WrittenBy">
<End Type="BooksModel.Book" Role="Book" Multiplicity="*" />
<End Type="BooksModel.Author" Role="Author" Multiplicity="*" />
</Association>
</Schema>