Dados relacionados com Entity Framework 4

Pessoal este tutorial ensina a realizar um CRUD com tabelas relacionadas(Herança).

Tabelas que herdam de outras. Por exemplo: você vai excluir um produto, mas ele também deve excluir a sua categoria. Como fazer essa exclusão sem ter que excluir a categoria. Vou explicar neste post.

Não vou detalhar muito como criar um projeto, um modelo do Entity Framework e etc, apenas explicar o relacionamento entre as tabelas.

Primeiro você deve criar um novo projeto WebFormApplication.

Depois você acrescenta um novo web form chamado cadastro.

Nosso layout deve ficar assim:

Agora vamos criar nosso modelo de dados EDMX.

Adicione um novo modelo em branco do entity framework. Crie o modelo conforme abaixo, pode colocar qualquer nome para o modelo:

Apenas 2 tabelas, algo simples para poder entender. Um relacionamento 1:N significa que 1 cliente pode ter vários endereços ou muitos endereços.

Gere o script desse modelo. Depois abra o SQL Server Management Studio e execute esse script lá. Se não como fazer, procure meu tutorial Crud com entity framework fácil, ensina passo a passo.

Em seguida clique 2 vezes no botão salvar para criar o método.

Coloque o seguinte código abaixo:


using (BancoEntities ctx = new BancoEntities())
{
Cliente cliente = new Cliente();// Devemos instanciar a tabela cliente(entidade)
Endereco endereco = new Endereco();// Estanciar a tabela endereco Também.

//Até aqui já conhecemos o procedimento.
cliente.Nome = txtNome.Text;
cliente.Email = txtEmail.Text;

endereco.Endereco1 = txtEndereco.Text;
endereco.Bairro = txtBairro.Text;
endereco.Cidade = txtCidade.Text;

//Aqui é o importante
endereco.Cliente.Add(cliente); //Nessa Linha vemos que podemos acessar as propriedades de outra tabela por meio do nosso objeto criado.

//Aqui vai depender de como ta os relacionamento da sua tabela. Poderia ser assim: cliente.Endereco.Add(endereco);
//Perceba que ao fazer endereco.Cliente.Add(cliente), ele apenas te dar a opçõe de Adicionar outro objeto. Se você fizer cliente.Endereco. , vai mostrar as propriedades da tabela endereço.

ctx.Endereco.AddObject(endereco); //Aqui a mesma coisa. Poderia ser assim: ctx.Cliente.AddObject(cliente);
ctx.SaveChanges();
CarregaGrid();
}

Lembrando que tudo depende de como está seus relacionamentos para você manipular seus objetos -> 1:N, N:N N:1 e etc.

Rode o projeto para verificar se está tudo ok.

Eu criei um método para mostrar o novo cliente inserido no banco em tempo de execução.

Apenas isso:


public void CarregaGrid()
{
using (BancoEntities ctx = new BancoEntities())
{
GridDados.DataSource = ctx.Cliente;
GridDados.DataBind();
}
}

Más cadê os dados do endereço no grid ? Como fazer pra mostrar os dados das 2 tabelas no grid. Você poderia usar uma StoreProcedure.

Vou mostrar como fazer usando linq to Entities. Vamos ao código

No método CarregaGrid acrescente o seguinte código:


var dados = from d in ctx.Cliente
select new // Aqui usamos o operador new para selecionar dados</code></strong></pre>
{
d.Nome, d.Email, d.Endereco.Endereco1, //Nestas 3 últimas linhas observamos que acessamos as propriedades da tabela endereço por meio da cliente.
// Poderia ser s.Cliente.Endereco...
d.Endereco.Bairro,
d.Endereco.Cidade
};
GridDados.DataSource = dados;
GridDados.DataBind();

Rode o projeto e verifique: