Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Entity Framework - validar a unicidade de um campo

Praticando o CRUD com o Entity Framework 5 + MySQL, CodeFirst, surgiu uma dúvida.

Como especificar que um campo é único?

Estou a utilizar migrations

Cumps PS

5 respostas

A primeira coisa a fazer é declarar o namespace Imports System.ComponentModel.DataAnnotations no arquivo.

E antes da propriedade colocar[Key] como no exemplo:

public class Livro { [Key] public string ISBN { get; set; }

[StringLength(256)] public string Titulo { get; set; }

public string Autor { get; set; }

}

Olá Christiane,

Obrigado pela resposta. Mas infelizmente a minha dúvida continua.

[Key] - não serve apenas para chave primária?

Ou é permitido fazer como abaixo: ??

public class Utilizador
{
    [Key]
    public int Id { get; get; }
    [Key]
    public string Username { get; set; }
    public string Password { get; set; }
}

pois a ideia é tornar o campo "username" único.

Grato pela atenção

Cumps PS

EF não suporta UK vai ter que rodar ela no banco..

na mão ou com o ef:

_contexto.Database.ExecuteSqlCommand("CREATE UNIQUE KEY ...")

Pode ser possível colocar ela na lógica da aplicação.

public void SalvarUsuario(Usuario user)
{
   if (contexto.Usuarios.Select(u => u.Nome == user.Nome))
     throw new Exception("Unique Key Violation: Usuario Com nome repetido");

   // resto do código para salvar ... 
}
solução!

Po não tem como editar, faltou o .Any() ou .Count > 0

public void SalvarUsuario(Usuario user)
{
   if (contexto.Usuarios.Select(u => u.Nome == user.Nome).Any())
     throw new Exception("Unique Key Violation: Usuario Com nome repetido");

   // resto do código para salvar ... 
}

Ainda não testei... mas acho que vou ficar com a solução do Turah

Muito obrigado