Utilizando Strings e GUIDs como primary keys

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#

Publicidade

4 comentários sobre “Utilizando Strings e GUIDs como primary keys

  1. 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

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.