No puedo encontrar la manera de agregar una restricción única a mi campo usando el 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; }
}
Estoy usando estos paquetes:
"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",
Respuestas:
En EF core no puede crear índices usando anotaciones de datos, pero puede hacerlo usando la API Fluent.
Así dentro de tu
{Db}Context.cs
:... o si está utilizando la sobrecarga con buildAction:
Puede leer más sobre esto aquí: Índices
fuente
HasAlternateKey
Además, si desea crear restricciones únicas en varias columnas, simplemente puede hacerlo (siguiendo el enlace de @ Sampath )
fuente
Solución para EF Core
La tabla DB se verá así:
Ref. A los documentos de EF Core
fuente
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.
El OP pregunta si es posible agregar un atributo a una clase de entidad para una clave única. La respuesta corta es que ES posible, pero no es una característica lista para usar del Equipo Principal de EF. Si desea utilizar un atributo para agregar claves únicas a sus clases de entidad Entity Framework Core, puede hacer lo que he publicado aquí
fuente
Para alguien que está probando todas estas soluciones pero no funciona, pruebe esta, funcionó para mí
fuente
Para usarlo en el núcleo de EF a través de la configuración del modelo
fuente
Ninguno de estos métodos funcionó para mí en .NET Core 2.2, pero pude adaptar parte del código que tenía para definir una clave principal diferente para este propósito.
En la siguiente instancia, quiero asegurarme de que el campo OutletRef sea único:
Esto agrega el índice único requerido en la base de datos. Sin embargo, lo que no hace es proporcionar la capacidad de especificar un mensaje de error personalizado.
fuente
Podemos agregar un índice de clave único utilizando una API fluida. El siguiente código funcionó para mí
fuente