Extends Attribute (EntityContainer CSDL)

The Extends attribute of the EntityContainer element in the Entity Data Model (EDM) provides a means to add entities and associations to an existing schema.

Consider a scenario where a developer defines model A. Another developer wants to extend model A to create a new model B. This new model B introduces some new types and associations between the new types and the existing types, but the changes to the original model A are only additive associations or specialized implementations of the original types.

The following schema defines a model A that includes Car and Person entities, an association between the two entities to relate car owners, and entity sets corresponding to each definition of Car, Person, and Owner.

<?xml version="1.0" encoding="utf-8"?>
<Schema Namespace="MyCompany.MySchema" Alias="ModelA" xmlns="https://schemas.microsoft.com/ado/2006/04/edm">
  <EntityContainer Name="ContainerA">
    <EntitySet Name="Cars" EntityType="ModelA.Car" />
    <EntitySet Name="People" EntityType="ModelA.Person" />
    <AssociationSet Name="CarOwners" AssociationType="ModelA.CarOwner">
      <End Role="Cars" EntitySet="ModelA.Cars" />
      <End Role="Owner" EntitySet=" ModelA.People" />
    </AssociationSet>
  </EntityContainer>

  <EntityType Name="Car">
    <Key>
      <PropertyRef Name="Make" />
      <PropertyRef Name="Model" />
    </Key>
    <Property Name="Make" Type="String" />
    <Property Name="Model" Type="String" />
  </EntityType>
  
  <EntityType Name="Person">
    <Key>
      <PropertyRef Name="FirstName" />
      <PropertyRef Name="LastName" />
    </Key>
    <Property Name="FirstName" Type="String" />
    <Property Name="LastName" Type="String" />
  </EntityType>
  
  <Association Name="CarOwner">
    <End Role="Cars" Type=" ModelA.Car" Multiplicity="*" />
    <End Role="Owner" Type=" ModelA.Owner" Multiplicity="1" />
  </Association>
</Schema>

A second developer extends the model by adding RichPerson type, Dealer type, and LuxuryCar type with corresponding entity sets. A relationship between Dealer and Car is also added to represent dealerships.

<?xml version="1.0" encoding="utf-8"?>
<Schema Namespace="MyCompany.MySchema2" Alias="ModelB" xmlns="https://schemas.microsoft.com/ado/2006/04/edm">
  <Using Namespace="MyCompany.MySchema" Alias="ModelA" />
  <EntityContainer Name="ContainerB" Extends="ContainerA" >
    <EntitySet Name="LuxuryCars" EntityType="ModelB.LuxuryCar" />
    <EntitySet Name="RichPeople" EntityType="ModelB.RichPerson" />
    <EntitySet Name="CarDealers" EntityType="ModelB.CarDealer" />
    <AssociationSet Name="DealerCars" AssociationType="ModelB.DealerCars">
      <End Role="CarDealers" EntitySet="CarDealers" />
      <End Role="Cars" EntitySet="Cars" />
    </AssociationSet>
  </EntityContainer>

  <EntityType Name="Dealer">
      …
  </EntityType>

  <EntityType Name="LuxuryCar" BaseType="ModelA.Car" >
      <Property Name="Price" Type="Decimal" />
  </EntityType>

  <EntityType Name="RichPerson" BaseType="Person">
    <Property Name="NetWorth" Type="Decimal" />
  </EntityType>

  <Association Name="DealerCars">
    <End Role="CarDealers" Type="ModelB.CarDealers" Multiplicity="1" />
    <End Role="Cars" Type="ModelA.Car" Multiplicity="*" />
  </Association>
</Schema>

See Also

Concepts

Inheritance (EDM)