Array
(
)

[Entity Framework] - Atualizar edmx a partir do banco de dados

César Riva
   - 17 mai 2012

Fala galera, to com uma dúvida com relação ao modelo .edmx gerado pelo Entity Framework utilizando a metodologia Database First.
Estou desenvolvendo uma aplicação onde criei algumas tabelas no banco e então criei o modelo no EE, então alterei o nome das propriedades geradas no modelo. O problema é que esse banco de dados ainda irá crescer, pois irei criar mais tabelas, desse modo, preciso constantemente atualizar meu modelo, porém, ao fazer isso, toas as propriedades que estavam com o nome alterado, voltam a ter os mesmos nomes das colunas referentes no banco...e isso está me atrapalhando muito, gostaria de saber, se existe algum jeito de realizar o update no modelo trazendo as novas tabelas criadas, porém, sem atualizar as entidades já existentes no meu modelo...
Desde já agradeço

Rodrigo Odasaki
   - 17 mai 2012

César Riva,

Não se deve alterar o código gerado pelo EDMX, você pode perceber que todas as classes geradas por ele, são do tipo partial, justamente para que você realize suas mudanças em arquivos de classes separadas ao EDMX, já que após qualquer atualização, todas as classes geradas por ele são regeneradas.

Joel Rodrigues
   - 17 mai 2012

César, ao atualizar o modelo você terá a opção de atualizar os objetos que sofreram modificações ou apenas adicionar os novos. Acredito que você precise apenas adicionar os novos, certo?

Joel Rodrigues
   - 17 mai 2012

César, ao atualizar o modelo você terá a opção de atualizar os objetos que sofreram modificações ou apenas adicionar os novos. Acredito que você precise apenas adicionar os novos, certo?

César Riva
   - 17 mai 2012

Olá Joel, parece que sim, fiz o teste aqui, criei uma nova tabela básica, e dei o update model from databse, lá pude escolher apenas adicionar a nova tabela, desse modo minhas entidades que já estavam no modelo não foram alteradas...

muito obrigado pela dica!

Joel Rodrigues
   - 17 mai 2012

Disponha, fico feliz por ter ajudado.
Quando precisar, estamos aqui.

Ricardo
   - 01 mar 2016

Cesar, estou aprendendo isso agora, e no livro que estou lendo ele sugeriu criar novas classes para cada classe parcial gerada automaticamente pelo EF.

Essa é a classe gerada pelo EF
#Código

//------------------------------------------------------------------------------
// <auto-generated>
//    This code was generated from a template.
//
//    Manual changes to this file may cause unexpected behavior in your application.
//    Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace CadeMeuMedico.Models
{
    using System;
    using System.Collections.Generic;
    
    public partial class Medicos
    {
        public long IDMedico { get; set; }
        public string CRM { get; set; }
        public string Nome { get; set; }
        public string Endereco { get; set; }
        public string Bairro { get; set; }
        public string Email { get; set; }
        public bool AtendePorConvenio { get; set; }
        public bool TemClinica { get; set; }
        public string WebsiteBlog { get; set; }
        public int IDCidade { get; set; }
        public int IDEspecialidade { get; set; }
    
        public virtual Cidades Cidades { get; set; }
        public virtual Especialidades Especialidades { get; set; }
    }
}


Essa é a classe criada para fazer as verificações andes dos dados serem inseridos no banco de dados, dessa forma sempre que houver alguma alteração no banco de dados, você não precisa refazer todas as validações.
#Código
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;

namespace CadeMeuMedico.Models
{
    [MetadataType(typeof(MedicoMetadado))]
    public partial class Medicos
    {
    }
    
    public class MedicoMetadado
    {
       [Required(ErrorMessage="Obrigatório informar o CRM")]
       [StringLength(30, ErrorMessage="O CRM deve possuir no máximo 30 caracteres")]
       public string CRM { get; set; }

       [Required(ErrorMessage = "Obrigatório informar o Nome")]
       [StringLength(80, ErrorMessage = "O Nome deve possuir no máximo 80 caracteres")]
       public string Nome { get; set; }

       [Required(ErrorMessage = "Obrigatório informar o Endereço")]
       [StringLength(100, ErrorMessage = "O Endereço deve possuir no máximo 100 caracteres")]
       public string Endereco { get; set; }

       [Required(ErrorMessage = "Obrigatório informar o Bairro")]
       [StringLength(60, ErrorMessage = "O Bairro deve possuir no máximo 60 caracteres")]
       public string Bairro { get; set; }

       [Required(ErrorMessage = "Obrigatório informar o E-mail")]
       [StringLength(100, ErrorMessage = "O E-mail deve possuir no máximo 100 caracteres")]
       public string Email { get; set; }

       [Required(ErrorMessage = "Obrigatório informar se Atende por Convênio")]
       public bool AtendePorConvenio { get; set; }

       [Required(ErrorMessage = "Obrigatório informar se Tem Clínica")]
       public bool TemClinica { get; set; }

       [StringLength(80, ErrorMessage = "O Website deve possuir no máximo 80 caracteres")]
       public string WebsiteBlog { get; set; }

       [Required(ErrorMessage = "Obrigatório informar a Cidade")]
       public int IDCidade { get; set; }
 
       [Required(ErrorMessage = "Obrigatório informar a Especialidade")]
       public int IDEspecialidade { get; set; }         
    }//
}


Me desculpe se não era essa a pergunta, como disse, estou aprendendo ASP .NET MVC agora, espero ter ajudado.

Att.,