Inquiridor
Chaves primárias

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
Todas as Respostas
-
-
-
-
-
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 -