Curso Entity Framework - O Relacionamento entre Entidades - X


  Nesta aula vamos tratar do relacionamento entre entidades no Entity Framework. (aula anterior)

Podemos ter 3 tipos de relacionamentos em um Entity Data Model (EDM) :

  1. Um para um
  2. Um para muitos
  3. Muitos para Muitos
O Entity Data Model (EDM) ou modelo de entidades de dados pode ser considerado o coração da Entity Framework.

O EDM é um modelo entidades - relacionamentos onde:

  • Entidades - são instâncias de tipos de entidades como Clientes, Produtos os quais estão estruturados em registros e chaves;
  • Relacionamentos - são instâncias de tipos de relacionamentos que são associações entre dois ou mais tipos de entidades;

É a partir do modelo de entidades que podemos escrever código usando as diferentes APIs, como o provedor EntityClient ou o Object Services com LINQ to Entitie

Vamos examinar as tabelas do banco de dados EscolaDB.mdf antes de falar do relacionamento no EDM.

Abaixo temos a figura do diagrama de relacionamento das tabelas do banco de dados EscolaDB.mdf:

No diagrama de relacionamentos podemos identificar os seguintes relacionamentos:

Quando criamos um ADO .NET Enty Data Model a partir do banco de dados EscolaDB.mdf usando a opção EF Designer from database, serão criados as seguintes entidades e relacionamentos no EDM:

Como podemos observar :

O relacionamento Muitos-para-Muitos no EDM

Abrindo o arquivo EDM em um editor XML (Pode usar o NotePad++). Você pode ver que tem a seção do SSDL possui a EntitySet AlunoCurso, mas a seção CSDL não tem a EntitySet AlunoCurso, ela está sendo mapeada na propriedade de navegação das entidades Aluno e Curso.

Na seção MSL (CS Mapping), existe um mapeamento entre Aluno e Curso na tabela AlunoCurso em <AssociationSetMapping /> :

  .....
  <Association Name="FK_AlunoCurso_Curso">
          <End Role="Curso" Type="Self.Curso" Multiplicity="1" />
          <End Role="AlunoCurso" Type="Self.AlunoCurso" Multiplicity="*" />
          <ReferentialConstraint>
            <Principal Role="Curso">
              <PropertyRef Name="CursoId" />
            </Principal>
            <Dependent Role="AlunoCurso">
              <PropertyRef Name="CursoId" />
            </Dependent>
          </ReferentialConstraint>
 </Association>
 ...
 
Assim, o relacionamento Muitos-para-Muitos está sendo gerenciado pelo mapeamento CS no EDM. Então, quando você adiciona um Aluno em um curso ou um Curso em uma entidade Aluno e salva, então serão incluídos uma PK do aluno adicionado e do curso adicionado na tabela AlunoCurso. Portanto, este mapeamento não só permite uma associação conveniente diretamente entre as duas entidades, mas também gerencia consultas, inserções e atualizações através desta articulação.

Nota: O EDM faz isso apenas quando a tabela de junção possui somente colunas PK para ambas as tabelas. Se houver outras colunas na tabela, então o EDM vai tratá-los como entidades normais e você tem que usar 'Join' em sua consulta para buscar os dados.

Para um exemplo prático completo veja o artigo : Entity Framework 6 - Modelando um relacionamento muitos-para-muitos

Gráfico de Entidade (Entity Graph)

Quando uma entidade tem um relacionamento com outras entidades, então, uma hierarquia completa de objetos é chamada de um "gráfico de entidade'. Por exemplo, a seguir temo um gráfico da entidade Aluno, que inclui a  hierarquia completa de objetos : Padrão, AlunoEndereco e Curso :

Na próxima aula vamos tratar das consultas projeção que selecionam dados no Entity Framework.

Disse-lhes Jesus: Em verdade, em verdade vos digo que antes que Abraão existisse, Eu Sou.
João 8:58

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?


             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
 

Referências:


José Carlos Macoratti