none
Salvando um objeto que herda de outro no EF RRS feed

  • Pergunta

  • Boa noite a todos!

    Criei um objeto no EF "Person", mais 2 outros, "Contact", "Customer".
    Estes 2 últimos herdam de "Person".
    "Person" é uma classe abstrata.

     

    Meu problema é que no código abaixo não aparece a opção de salvar um objeto do tipo "Contact" ou "Customer", aparece apenas um método para salvar um objeto do tipo "People" que é o plural de "Person".

          using (var ctx = new Entities.R2ManagerEntities())
          {
            contactBindingSource.DataSource = ctx.AddToPeople(/*Não aparece AddToContact*/);
          }
    
    Os objetos do Entity Framework ficam em outra camada. Este código encontra-se na camada de UI, e os objetos do EF na camada de Dados


    Abraços, Riderman | Analista de sistemas | MCTS http://ridermansb.spaces.live.com/
    domingo, 5 de dezembro de 2010 21:23

Respostas

  • Amigo, veja no exemplo abaixo como você faz para retornar somente um tipo atraves do objeto pai da entidade

    ExampleContainer c = new ExampleContainer();
          Person p1 = new Contact { Nome = "Olavo Oliveira Neto", CPF = "123456789" };
          Person p2 = new Contact { Nome = "Olavo Neto", CPF = "123456789" };
    
          Customer c1 = new Customer { Nome = "Customer 1", CNPJ = "123456789" };
          Customer c2 = new Customer { Nome = "Customer 2", CNPJ = "123456789" };
    
          c.Person.AddObject(p1);
          c.Person.AddObject(p2);
          c.Person.AddObject(c1);
          c.Person.AddObject(c2);
    
          c.SaveChanges();
    
          //Recupera pelo tipo
          var query = from q in c.Person.OfType<Customer>()
                select q;
          foreach (Customer customer in query.ToList())
          {
            string nome = customer.Nome;
          }
    


    Olavo Oliveira Neto
    Se for útil marque como resposta e faça um Developer feliz :)
    quarta-feira, 8 de dezembro de 2010 11:46

Todas as Respostas

  • Amigo, para objetos herdados, você manipula eles pela super classe, ou seja atravês do objeto person você persiste o Contact e o Customer

    Olavo Oliveira Neto
    Se for útil marque como resposta e faça um Developer feliz :)
    segunda-feira, 6 de dezembro de 2010 11:39
  • E como ficaria a busca?

    No Context tenho o objeto pai (Person) porem não tenho os objetos filhos (Contact e Customer).

     

    Como posso fazer uma busca utilizando linq em todos os Contacts por exemplo?

     


    Abraços, Riderman | Analista de sistemas | MCTS http://ridermansb.spaces.live.com/
    terça-feira, 7 de dezembro de 2010 22:49
  • Amigo, veja no exemplo abaixo como você faz para retornar somente um tipo atraves do objeto pai da entidade

    ExampleContainer c = new ExampleContainer();
          Person p1 = new Contact { Nome = "Olavo Oliveira Neto", CPF = "123456789" };
          Person p2 = new Contact { Nome = "Olavo Neto", CPF = "123456789" };
    
          Customer c1 = new Customer { Nome = "Customer 1", CNPJ = "123456789" };
          Customer c2 = new Customer { Nome = "Customer 2", CNPJ = "123456789" };
    
          c.Person.AddObject(p1);
          c.Person.AddObject(p2);
          c.Person.AddObject(c1);
          c.Person.AddObject(c2);
    
          c.SaveChanges();
    
          //Recupera pelo tipo
          var query = from q in c.Person.OfType<Customer>()
                select q;
          foreach (Customer customer in query.ToList())
          {
            string nome = customer.Nome;
          }
    


    Olavo Oliveira Neto
    Se for útil marque como resposta e faça um Developer feliz :)
    quarta-feira, 8 de dezembro de 2010 11:46
  • Ahh sim, "OfType" é o comando que queria. Muito Obrigado!!

     


    Abraços, Riderman | Analista de sistemas | MCTS http://ridermansb.spaces.live.com/
    quarta-feira, 8 de dezembro de 2010 13:13