Quem trabalha com bancos de dados sabe que não só de campos inteiros são criadas as chaves primárias. Por
isso, este post vai demonstrar como utilizar propriedades string ou GUID (global unique identifier) como
chaves primárias de nossas tabelas quando trabalhamos com o Entity Framework.
Vamos começar nosso exemplo criando chaves primárias com strings.
1 – Crie a entidade.
public class EntidadeKeyString { public string Id { get; set; } public string Rotulo { get; set; } }
2 – Crie um mapeamento para a chave primária indicando o comportamento de geração automática de
valores.
protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<EntidadeKeyString>().HasKey(t => t.Id) .Property(t => t.Id) .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); base.OnModelCreating(modelBuilder); }
Note que este mapeamento indica que a propriedade “Id” corresponde à chave primária da tabela no
banco de dados, e que o banco de dados não possui nenhuma ação de geração automática de valores
no banco de dados, ao contrário do comportamento de um campo auto-numérico.
E lembrando que: quando utilizamos uma entidade com a chave primária do tipo string, somos
“obrigados” a atribuir um valor a este campo, para que este seja armazenado na base e utilizado como
identificador da tupla na tabela, como no exemplo abaixo:
var es = new EntidadeKeyString(); es.Id = "<Valor Chave>"; es.Rotulo = "Rótulo."; using (var contexto = new Contexto()) { contexto.EntidadesString.Add(es); contexto.SaveChanges(); }
Para criar chaves primárias com o tipo GUID é preciso:
1 – Criar a entidade.
public class EntidadeKeyGUID { public Guid Id { get; set; } public string Rotulo { get; set; } }
2 – Criar um mapeamento para a chave primária indicando o comportamento de geração automática de
valores.
protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<EntidadeKeyGUID>().HasKey(t => t.Id) .Property(t => t.Id) .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); base.OnModelCreating(modelBuilder); }
Ao contrário das strings (e da mesma forma como os tipos inteiros funcionam), o tipo GUID exige que o
mapeamento do campo tenha valores controlados/gerados pelo banco de dados.
Esse modelo não exige a atribuição de valores para a propriedade que corresponde a chave primária,
assim como as propriedades de tipo inteiro funcionam. Abaixo um exemplo de uso:
var eg = new EntidadeKeyGUID(); eg.Rotulo = "Rótulo."; using (var contexto = new Contexto()) { contexto.EntidadesGuid.Add(eg); contexto.SaveChanges(); }
Por
MSc. Fernando Henrique Inocêncio Borba Ferreira
Microsoft Most Valuable Professional – Visual C#
Fernando, sério! Você precisa escrever um livro, cara! vc já tem muito material…
Hehehe obrigado pelo comentário, Yan.
Eu penso em escrever um livro, mas talvez fique pro ano que vem 🙂
Obrigado por postar!
[]s!
Só não entendi a vantagem de usar guid, até por que usa mais byte(já imaginou um grande banco?), e em url amigáveis são mais feias…
Não consegui ver motivo de usar guid
rsrsrs
Olá Rodrigo,
Tudo bem?
Aqui tem um link com mais explicações: http://www.codinghorror.com/blog/2007/03/primary-keys-ids-versus-guids.html
[]s!