none
Chaves primárias RRS feed

  • Pergunta

  • Olá.

    Estamos com problemas em definir uma estratégia para gerar e recuperar a chave primária de algumas tabelas. No código abaixo mostra como está montado as entidades.

     public class Empresa
     {
      public int EmpresaId { get; private set; }
      public string Nome { get; set; }
     }
    
     public class Loja
     {  
      [Key, DatabaseGenerated(DatabaseGeneratedOption.None), Column(Order=0)]
      public int EmpresaId { get; private set; }
    
      [Key, DatabaseGenerated(DatabaseGeneratedOption.None), Column(Order=1)]
      public int LojaId { get; set; }
      public string Nome { get; set; }
    
      [ForeignKey("EmpresaId")]
      public virtual Empresa Empresa{ get; set; }
     }
    
    
    


    A entidade Empresa está gerando a chave primária como um campo auto-incremento (identity). O problema está na entidade Loja, ela é uma chave primária em que receberá o EmpresaID e um sequencial para incrementar o LojaID. Exemplo:

    EmpresaID LojaID
    1 1
    1
    2
    1
    3
    2
    1
    2
    2
    3 1
    3 2

    Ou seja, o LojaID é incrementado conforme o EmpresaID.

    Pensamos em criar uma trigger utilizando o MAX+1, mas precisamos recuperar o LojaID, pois em alguns casos será necessário a inserção de dados numa terceira tabela onde há as chaves EmpresaID, LojaID e DepartamentoID. Pensamos a aplicação buscando o ID.

    O ideal seria ter a possibilidade de ter o LojaID com identity, mas controlado por outro atributo agrupador (EmpresaID).

     

    Sugestões.

     

    Grato.


    []'s
    quinta-feira, 25 de agosto de 2011 19:08

Todas as Respostas

  • isto e web ou winform?

    e uma aplicao multi-usuario?

     


    One word frees us of all the weight and pain of life: that word is love.
    quinta-feira, 25 de agosto de 2011 20:32
  • Olá Malange.

    É uma aplicação Web (Silverlight), multi-usuário.

     


    []'s
    sexta-feira, 26 de agosto de 2011 12:19
  • Olá Malange.

    É uma aplicação Web (Silverlight), multi-usuário.

     


    []'s
    estas no forum errado, vai ao silverl
    One word frees us of all the weight and pain of life: that word is love.
    sexta-feira, 26 de agosto de 2011 12:42
  • Mas a dúvida não é sobre silverlight... e sim sobre o acesso ao banco... estratégias para obter a chave primária.

    A problemática seria para qualquer tipo de aplicação, web ou win.


    []'s
    sexta-feira, 26 de agosto de 2011 13:04
  • Olá Marcos.

    Não sei se já resolveu o seu problema, mas deixa eu entender melhor. VocÊ possui uma tabela "Empresa" com uma PK simples do tipo Identity e uma tabela "Loja" com uma PK composta (IdEmpresa,IdLoja), certo? A coluna IdEmpresa é uma FK para a tabela Empresa e a coluna IdEmpresa seria uma sequencia a partir da IdEmpresa, certo? Bom neste caso, acredito que a solução seria antes de realizar a inserção consultar o ultimo número gravado para o IdEmpresa + 1 e informar isso explicitamente na entidade. Você está usando algum ORM? Porque apesar de você dizer que é um problema de tabelas, no código estão declaradas as classes.

     


    Alessandro Brito
    quarta-feira, 31 de agosto de 2011 20:33
  • Olá Alessandro.

     

    É realmente o que você escreveu. Uma chave composta. Estamos utilizando o Entity Framework 4.1

     

    Grato.

     


    []'s
    segunda-feira, 5 de setembro de 2011 19:03