Sdílet prostřednictvím


Koncepty modelu EDM (Entity Data Model)

Model Entity Data Model (EDM) používá tři klíčové koncepty k popisu struktury dat: typ entity, typ přidružení a vlastnost. Jedná se o nejdůležitější koncepty popisující strukturu dat v jakékoli implementaci EDM.

Typ entity

Typ entity je základním stavebním blokem pro popis struktury dat pomocí modelu Entity Data Model. V konceptuálním modelu se typy entit vytvářejí z vlastností a popisují strukturu konceptů nejvyšší úrovně, jako jsou zákazníci a objednávky v obchodní aplikaci. Stejně jako definice třídy v počítačovém programu je šablona pro instance třídy, typ entity je šablona pro entity. Entita představuje konkrétní objekt (například konkrétního zákazníka nebo objednávku). Každá entita musí mít v sadě entit jedinečný klíč entity. Sada entit je kolekce instancí konkrétního typu entity. Sady entit (a sady přidružení) se logicky seskupují do kontejneru entit.

Dědičnost je podporována u typů entit: to znamená, že jeden typ entity může být odvozen od jiného. Další informace najdete v tématu Entity Data Model: Dědičnost.

Typ přidružení

Typ přidružení (označovaný také jako asociace) je základním stavebním blokem pro popis relací v modelu Entity Data Model. V konceptuálním modelu přidružení představuje vztah mezi dvěma typy entit (například Zákazník a Objednávka). Každé přidružení má dva konce přidružení, které určují typy entit, které jsou součástí přidružení. Každý konec přidružení také určuje násobnost konce přidružení, která označuje počet entit, které mohou být na konci přidružení. Koncová násobnost přidružení může mít hodnotu 1, nula nebo jednu (0,,1) nebo mnoho (*). Entity na jednom konci přidružení mohou být přístupné prostřednictvím navigačních vlastností nebo cizích klíčů, pokud jsou vystaveny u typu entity. Další informace naleznete v tématu cizí klíč vlastnost.

Instance přidružení v aplikaci představuje konkrétní přidružení (například přidružení mezi instancí zákazníka a instancemi objednávky). Instance přidružení jsou logicky seskupeny v sadě přidružení. Sady přidružení (a sady entit) se logicky seskupují do kontejneru entit.

Vlastnost

Typy entit obsahují vlastnosti , které definují jejich strukturu a vlastnosti. Například typ entity Zákazník může mít vlastnosti, jako je CustomerId, Name a Address.

Vlastnosti v konceptuálním modelu jsou podobné vlastnostem definovaným ve třídě v počítačovém programu. Stejně jako vlastnosti třídy definují tvar třídy a přenášejí informace o objektech, vlastnosti v konceptuálním modelu definují tvar typu entity a přenášejí informace o instancích typu entity.

Vlastnost může obsahovat primitivní data (například řetězec, celé číslo nebo logickou hodnotu) nebo strukturovaná data (například komplexní typ). Další informace naleznete v tématu Entity Data Model: Primitivní datové typy.

Reprezentace konceptuálního modelu

Koncepční model je specifická reprezentace struktury některých dat jako entit a relací. Jedním ze způsobů, jak znázorňovat koncepční model, je diagram. Následující diagram představuje koncepční model se třemi typy entit (Book, Publishera ) a Authordvěma přidruženími (PublishedBy a WrittenBy):

Diagram showing a conceptual model with three entity types.

Tato reprezentace ale má určité nedostatky, pokud jde o vyjádření některých podrobností o modelu. Například informace o typu vlastnosti a sadě entit nejsou v diagramu předávány. Bohatost konceptuálního modelu lze srozumitelněji vyjádřit jazykem specifickým pro doménu (DSL). ADO.NET Entity Framework používá k definování konceptuálních modelů jazyka DSL založeného na JAZYCE XML označovaného jako jazyk CSDL (Conceptual Schema Definition Language). Následuje definice CSDL konceptuálního modelu v diagramu výše:

  <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>

Viz také