¿Hay alguna manera de crear un índice en una propiedad / columna usando el código primero, en lugar de usar el nuevo IndexAttribute
?
112
¿Hay alguna manera de crear un índice en una propiedad / columna usando el código primero, en lugar de usar el nuevo IndexAttribute
?
Respuestas:
Bueno, el 26.10.2017 Entity Framework 6.2 se lanzó oficialmente . Incluye la posibilidad de definir índices con facilidad a través de Fluent API. Ho es usar ya estaba anunció en la beta de 6.2.
Ahora puede usar el
HasIndex()
método, seguido deIsUnique()
si debe ser un índice único.Solo un pequeño ejemplo de comparación (antes / después):
También es posible marcar el índice como agrupado con
.IsClustered()
.EDITAR # 1
Se agregó un ejemplo de índice de varias columnas e información adicional sobre cómo marcar un índice como agrupado.
EDITAR # 2
Como información adicional, en EF Core 2.1 es exactamente igual que en EF 6.2 ahora.
Aquí está el artículo de MS Doc como referencia.
fuente
new
. Yo lo arreglare.Actualmente no existe un "soporte de primera clase" para crear un índice a través de la API fluida, pero lo que puede hacer es a través de la API fluida que puede marcar propiedades como atributos de la API de anotaciones. Esto le permitirá agregar el
Index
atributo a través de una interfaz fluida.A continuación, se muestran algunos ejemplos del elemento de trabajo del sitio de problemas para EF.
Cree un índice en una sola columna:
Varios índices en una sola columna:
Índices de varias columnas:
El uso de las técnicas anteriores hará que las
.CreateIndex()
llamadas se creen automáticamente para usted en suUp()
función cuando realice el scaffolding de su próxima migración (o se crearán automáticamente en la base de datos si no está usando migraciones).fuente
.Primarykey(x=>x.id,clustered:false)
métodoHasAnnotation
método y NO hay un método como este. pero encontré un método cuyo nombreHasColumnAnnotation
acepta los parámetros que proporcionas. ¿Necesitas actualizar tu respuesta o me equivoco?Creé algunos métodos de extensión y los envolví en un paquete nuget para hacer esto mucho más fácil.
Instale el
EntityFramework.IndexingExtensions
paquete nuget.Entonces puedes hacer lo siguiente:
El proyecto y el código fuente están aquí . ¡Disfrutar!
fuente
IndexAttribute
clase de EF , por lo que no puedo incluirlo en mi biblioteca.Sin un nombre explícito:
Con un nombre específico:
fuente
EntityFramework
. está incluido en ese ensamblaje. simplemente confundido acerca de la NS.instead of using the new IndexAttribute
¿lo notó?A partir de EF 6.1,
[Index]
se admite el atributo .Utilizar
[Index(IsUnique = true)]
para índice único.Aquí está el enlace de Microsoft
fuente
[Index("IX_BlogIdAndRating", 2)]
public int Rating { get; set; }
[Index("IX_BlogIdAndRating", 1)]
public int BlogId { get; set; }
aquí la referencia de MicrosoftEntity Framework 6
Y agregue usando:
fuente
Puede utilizar la anotación de datos INDEX Code First Data Annotations
fuente
Si no desea utilizar atributos en sus POCO, siempre puede hacerlo de la siguiente manera:
Puede ejecutar esta declaración en su
DbInitializer
clase derivada personalizada . Sin embargo, no conozco ninguna forma de Fluent API de hacer esto.fuente
Escribo un método de extensión para usarlo en EF fluido para evitar código adicional:
luego úsalo así:
o así si el índice necesita algunas configuraciones:
fuente
Puedes usar uno de estos
// Índices
o
fuente