Hoje irei mostrar como podemos criar um modelo de classes ou modelo de domínio, onde teremos relacionamentos One-To-Many(1 para muitos). Vamos aprender como trabalhar com relacionamentos entre entidades sem pensar, a príncipio, no relacionamento entre tabelas de banco de dados. Essa é uma visão que precisamos ter, quando estamos projetando modelagem OO, a qual será mapeada no banco de dados.

São os 3 tipos de relacionamentos entre entidades que temos no modelo OO: Associação, Agregação ou Composição. Não explicarei sobre Agregação e Composição, por agora, pois não é o foco deste artigo. O tipo de relacioinamento que iremos utilizar será uma Associação com multiplicidade 1-N.

Então, vamos ao que interessa!

Abra o seu visual studio e crie uma aplicação Console dando o nome deEF4OneToMany. Feito isso, crie uma pasta no seu projeto chamada Entities, onde ficarão nossas classes POCO assim como nossa classe do Contexto. Após ter iniciado esta configuração do projeto console, adicione um EDMX Empty Model ao projeto, dando o nome para ele de EF4OneToMany.edmx, ao criar o arquivo .edmx, você deve realizar a primeira configuração, como mostrado na figura abaixo:

Após ser realizada esta configuração, clique na parte branca do modelo do .edmx e faça a segunda parte da configuração, como mostrado na imagem abaixo:

Pronto, agora podemos criar nossas classes no nosso modelo de domínio. Para criar uma classe no modelo, clique com o botão direito na parte branca e selecione a opção Add -> Entity…, Vamos criar 3 Classes: Empresa, Departamento e Funcionario. A imagem abaixo, mostrará como deve ser feita a configuração para a classe Empresa. Esta mesma configuração deverá ser feita para todas as outras 2 classes.

Terminando de criar as 3 classes. Vamos adicionar a associação entre as entidades (relacionamentos, falando-se em banco de dados). A figura abaixo, mostra como deve ser criado estas associações:

Criada as associações, adicione os campos e configure o atributo DataCadastro, como mostrado na figura abaixo:

O outro atributo que precisa ser configurado, da mesma maneira que o atributo DataCadastro, é o atributo Salario, configurando o seu tipo para Decimal. Feito toda a configuração no nosso modelo, vamos agora criar nossas classes POCO. Criaremos 3 classes, correspondendo ao nosso modelo, como mostra o código abaixo:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace EF4OneToMany.Entities
{
public class Empresa
{
public virtual Int32 Id { get; set; }
public virtual DateTime DataCadastro { get; set; }
public virtual String Nome { get; set; }
public virtual String Endereco { get; set; }
public virtual String Bairro { get; set; }
public virtual String Cidade { get; set; }

private IList _departamentos = new List();
public virtual IList Departamentos
{
get { return _departamentos; }
set { _departamentos = value; }
}
}
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace EF4OneToMany.Entities
{
public class Departamento
{
public virtual Int32 Id { get; set; }
public virtual String Nome { get; set; }
public virtual Empresa Empresa { get; set; }

private IList _funcionarios = new List();
public virtual IList Funcionarios
{
get { return _funcionarios; }
set { _funcionarios = value; }
}
}
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace EF4OneToMany.Entities
{
public class Funcionario
{
public virtual Int32 Id { get; set; }
public virtual DateTime DataCadastro { get; set; }
public virtual String Nome { get; set; }
public virtual String Cargo { get; set; }
public virtual Decimal Salario { get; set; }
public virtual Departamento Departamento { get; set; }
}
}

Aqui está o código da nossa classe de Contexo:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Objects;

namespace EF4OneToMany.Entities
{
public class MeuContexto : ObjectContext
{
public MeuContexto()
: base("name=EF4OneToManyContainer", "EF4OneToManyContainer")
{

}

private IObjectSet empresa = null;
public IObjectSet Empresa
{
get
{
return empresa ?? CreateObjectSet();
}
}
}
}

Finalizando a criação das nossas classes POCO e da nossa classe de Contexto, Implementaremos agora o Método Main da nossa aplicação Console, como mostrado no código abaixo:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EF4OneToMany.Entities;

namespace EF4OneToMany
{
class Program
{
static void Main(string[] args)
{
MeuContexto meuContexto = new MeuContexto();

Empresa empresa = new Empresa();
empresa.Nome = "iDevelop";
empresa.Endereco = "Setor Comercial Sul";
empresa.DataCadastro = DateTime.Now;
empresa.Cidade = "Brasilia";
empresa.Bairro = "N/A";

#region Departamento RH

Departamento departamento1 = new Departamento();
departamento1.Nome = "RH";
departamento1.Funcionarios.Add(new Funcionario()
{
Nome = "Maria",
DataCadastro = DateTime.Now,
Cargo = "Analista",
Salario = 3500
});

departamento1.Funcionarios.Add(new Funcionario()
{
Nome = "Ana",
DataCadastro = DateTime.Now,
Cargo = "Auxiliar Administrativo",
Salario = 2200
});

#endregion

#region Departamento Desenvolvimento

Departamento departamento2 = new Departamento();
departamento2.Nome = "Desenvolvimento";

departamento2.Funcionarios.Add(new Funcionario()
{
Nome = "Carla",
DataCadastro = DateTime.Now,
Cargo = "Desenvolvedora",
Salario = 3000
});

departamento2.Funcionarios.Add(new Funcionario()
{
Nome = "João",
DataCadastro = DateTime.Now,
Cargo = "Desenvolvedor",
Salario = 3000
});

departamento2.Funcionarios.Add(new Funcionario()
{
Nome = "Mario",
DataCadastro = DateTime.Now,
Cargo = "Analista",
Salario = 4500
});

departamento2.Funcionarios.Add(new Funcionario()
{
Nome = "Suzana",
DataCadastro = DateTime.Now,
Cargo = "Analista",
Salario = 4500
});

#endregion

#region Departamento Arquitetura de Sistemas

Departamento departamento3 = new Departamento();
departamento3.Nome = "Arquitetura de Sistemas";

departamento3.Funcionarios.Add(new Funcionario()
{
Nome = "Roberto",
DataCadastro = DateTime.Now,
Cargo = "Arquiteto",
Salario = 6500
});

departamento3.Funcionarios.Add(new Funcionario()
{
Nome = "Caio",
DataCadastro = DateTime.Now,
Cargo = "Arquiteto",
Salario = 6500
});

#endregion

empresa.Departamentos.Add(departamento1);
empresa.Departamentos.Add(departamento2);
empresa.Departamentos.Add(departamento3);

meuContexto.Empresa.AddObject(empresa);
meuContexto.SaveChanges();

Console.WriteLine("Empresa cadastrada com seus Relacionamentos com sucesso !");

Console.ReadKey();
}
}
}

Pronto. Pode executar a sua aplicação de Exemplo, e se seguiu tudo corretamente como explicado no post, aparecerá a mensagem: “Empresa cadastrada com seus Relacionamentos com sucesso !”, no seu Console.

Aprofunde seus conhecimentos sobre esse tema na comunidade ADO.NET

Exibições: 187

Comentar

Você precisa ser um membro de DevBrasil para adicionar comentários!

Entrar em DevBrasil

Comentário de Reuber Abdias de Moura Junior em 19 novembro 2010 às 15:55
Olá
Fiz o passo a passo porém está dando erro no seguinte trecho.
private IList _funcionarios = new List();
public virtual IList Funcionarios
{
get { return _funcionarios; }
set { _funcionarios = value; }
}

e também nesse trecho.

private IObjectSet empresa = null;
public IObjectSet Empresa
{
get
{
return empresa ?? CreateObjectSet();
}

Parece que está faltando algo.
Comentário de José Roberto Araújo em 1 novembro 2010 às 23:57
Muito obrigado Thom !
Por esses dias estou um pouco atarefado, mas logo estarei postando mais artigos.
Vamos que vamos :D
Comentário de Thom Marques em 1 novembro 2010 às 19:27
Muito bacana, parabéns!!!

© 2018   Criado por Ramon Durães.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço