Não consigo encontrar uma maneira de adicionar uma restrição exclusiva ao meu campo usando o atributo:
public class User
{
[Required]
public int Id { get; set; }
[Required]
// [Index("IX_FirstAndSecond", 2, IsUnique = true)] not supported by core
public string Email { get; set; }
[Required]
public string Password { get; set; }
}
Estou usando estes pacotes:
"Microsoft.EntityFrameworkCore": "1.0.1",
"Microsoft.EntityFrameworkCore.SqlServer": "1.0.1",
"Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.1",
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
c#
entity-framework
entity-framework-core
Vadim M
fonte
fonte
Respostas:
No núcleo EF, você não pode criar índices usando anotações de dados, mas pode fazê-lo usando a API do Fluent.
Assim dentro do seu
{Db}Context.cs
:... ou se você estiver usando a sobrecarga com o buildAction:
Você pode ler mais sobre isso aqui: Índices
fonte
HasAlternateKey
Além disso, se você deseja criar restrições exclusivas em várias colunas, você pode simplesmente fazer isso (seguindo o link do @ Sampath )
fonte
Solução para EF Core
A tabela DB ficará assim:
Consulte os documentos principais da EF
fonte
If you just want to enforce uniqueness of a column then you want a unique index rather than an alternate key. In EF, alternate keys provide greater functionality than unique indexes because they can be used as the target of a foreign key.
O OP está perguntando se é possível adicionar um atributo a uma classe de entidade para uma chave exclusiva. A resposta curta é que é possível, mas não um recurso pronto para o uso da equipe principal da EF. Se você quiser usar um Atributo para adicionar Chaves Exclusivas às suas classes de entidade do Entity Framework Core, faça o que postamos aqui
fonte
Para alguém que está tentando todas essas soluções, mas não está trabalhando, tente esta, funcionou para mim
fonte
Para usá-lo no núcleo EF via configuração do modelo
fonte
Nenhum desses métodos funcionou para mim no .NET Core 2.2, mas fui capaz de adaptar algum código que eu tinha para definir uma chave primária diferente para trabalhar para esse fim.
Na instância abaixo, quero garantir que o campo OutletRef seja exclusivo:
Isso adiciona o índice exclusivo necessário no banco de dados. O que isso não faz é fornecer a capacidade de especificar uma mensagem de erro personalizada.
fonte
Podemos adicionar um índice de chave exclusivo usando API fluente. O código abaixo funcionou para mim
fonte