Обзор ADO.NET Entity Framework - Разбор CSDL

ОГЛАВЛЕНИЕ

Разбор CSDL

Метаданные, содержащиеся в CSDL-файле, содержат списки сущностей, представленных элементами EntityType, и связей, представленных элементами Association, относящихся к типу AssociationType (обратите внимание, что в схеме именования в выпуске Beta 1 есть несоответствия). На рис. 5 показан фрагмент CSDL-файла, который я создал ранее. Сущности содержат списки скалярных свойств, определяющих их. Атрибут Key показывает, какие свойства являются ключевыми. Составные ключи выделяются разделением имен свойств пробелами. Сущности также могут содержать специальные свойства, называемые NavigationProperty. Они определяют переходы от одной сущности к другой через ассоциации.

Figure 5 Определение EntityType в CSDL

<EntityType Name=”Customers” Key=”CustomerID”>
  <Property Name=”CustomerID” Type=”String” Nullable=”false” 
MaxLength=”4000” FixedLength=”true” />
  <Property Name=”CompanyName” Type=”String” Nullable=”false” 
MaxLength=”4000” />
  <Property Name=”ContactName” Type=”String” MaxLength=”4000” />
  <Property Name=”ContactTitle” Type=”String” MaxLength=”4000” />
  <Property Name=”Address” Type=”String” MaxLength=”4000” />
  <Property Name=”City” Type=”String” MaxLength=”4000” />
  <Property Name=”Region” Type=”String” MaxLength=”4000” />
  <Property Name=”PostalCode” Type=”String” MaxLength=”4000” />
  <Property Name=”Country” Type=”String” MaxLength=”4000” />
  <Property Name=”Phone” Type=”String” MaxLength=”4000” />
  <Property Name=”Fax” Type=”String” MaxLength=”4000” />
  <NavigationProperty Name=”Orders” 
Relationship=”NorthwindModel.FK_Orders_Customers” 
FromRole=”Customers” ToRole=”Orders” />
  </EntityType>

В следующем фрагменте CSDL определятся AssociationType между Customer и относящимися к нему Orders:

  <Association Name=”FK_Orders_Customers”>
  <End Role=”Customers” Type=
  ”NorthwindModel.Customers”  
  Multiplicity=”0..1” />
  <End Role=”Orders” Type=
  ”NorthwindModel.Orders” Multiplicity=”*” />
  </Association>

Элементы End в AssociationType указывают участвующих в ассоциации. В этом примере сущность Customers ассоциирована с сущностью Orders. Также сущность Customers может быть связана с любым числом сущностей Orders, что определяется атрибутом Multiplicity.

В то время как элементы EntityType и AssociationType определяют типы сущностей области и отношения между ними, элементы EntitySet и AssociationSet определяют их области применения. Все «наборы», которые должны быть сгруппированы вместе, содержатся внутри элемента EntityContainer. (Полный CSDL приведен в файле NorthwindEntities.csdl в прилагающейся загрузке).

Следующий фрагмент CSDL демонстрирует EntityContainer и часть его содержимого:

<EntityContainer Name=”NorthwindEntities”>
  <EntitySet Name=”Customers” 
  EntityType=”NorthwindModel.Customers” />
  <EntitySet Name=”Orders” 
  EntityType=”NorthwindModel.Orders” />
  <AssociationSet Name=”FK_Orders_Customers” 
  Association=”NorthwindModel.FK_Orders_Customers”>
  <End Role=”Customers” EntitySet=”Customers” />
  <End Role=”Orders” EntitySet=”Orders” />
  </AssociationSet>
</EntityContainer>

Этот фрагмент включает наборы EntitySet для типов EntityType Customers и Orders: Здесь же объявляется ассоциация AssociationSet FK_Orders_Customers. Таким образом, этот фрагмент определяет сущности Customers и Orders, а также связь между ними.