Existe uma maneira de criar um índice em uma propriedade / coluna usando o código primeiro, em vez de usar o novo IndexAttribute
?
112
Existe uma maneira de criar um índice em uma propriedade / coluna usando o código primeiro, em vez de usar o novo IndexAttribute
?
Respostas:
Bem, 26.10.2017 Entity Framework 6.2 foi lançado oficialmente . Inclui a possibilidade de definir índices com facilidade via API Fluent. Como ele deve ser usado já foi anunciado na versão beta do 6.2.
Agora você pode usar o
HasIndex()
método, seguido deIsUnique()
se deveria ser um índice exclusivo.Apenas um pequeno exemplo de comparação (antes / depois):
Também é possível marcar o índice como agrupado com
.IsClustered()
.EDITAR # 1
Adicionado um exemplo de índice de várias colunas e informações adicionais sobre como marcar um índice como agrupado.
EDITAR # 2
Como informação adicional, no EF Core 2.1 é exatamente o mesmo que no EF 6.2 agora.
Aqui está o artigo do MS Doc como referência.
fonte
new
. Eu irei consertar isso.Atualmente não há "suporte de primeira classe" para a criação de um índice por meio da API fluente, mas o que você pode fazer é por meio da API fluente marcar propriedades como tendo atributos da API de anotação. Isso permitirá que você adicione o
Index
atributo por meio de uma interface fluente.Aqui estão alguns exemplos do item de trabalho do site de problemas da EF.
Crie um índice em uma única coluna:
Vários índices em uma única coluna:
Índices multicolunas:
O uso das técnicas acima fará com que as
.CreateIndex()
chamadas sejam criadas automaticamente para você em suaUp()
função quando você organizar sua próxima migração (ou sejam criadas automaticamente no banco de dados se você não estiver usando migrações).fonte
.Primarykey(x=>x.id,clustered:false)
methodHasAnnotation
método e não existe nenhum método como este. mas encontrei um método cujo nomeHasColumnAnnotation
aceita os parâmetros que você fornece. Você precisa atualizar sua resposta ou estou errado?Criei alguns métodos de extensão e os envolvi em um pacote nuget para tornar isso muito mais fácil.
Instale o
EntityFramework.IndexingExtensions
pacote nuget.Então você pode fazer o seguinte:
O projeto e o código-fonte estão aqui . Aproveitar!
fonte
IndexAttribute
classe de EF , então não posso incluí-lo em minha biblioteca.Sem um nome explícito:
Com um nome específico:
fonte
EntityFramework
. está incluído nessa montagem. apenas confuso sobre o NS.instead of using the new IndexAttribute
você notou?Do EF 6.1 em diante, o atributo
[Index]
é suportado.Use
[Index(IsUnique = true)]
para um índice exclusivo.Aqui está o link da Microsoft
fonte
[Index("IX_BlogIdAndRating", 2)]
public int Rating { get; set; }
[Index("IX_BlogIdAndRating", 1)]
public int BlogId { get; set; }
Aqui a referência da MicrosoftEntity Framework 6
E adicione usando:
fonte
Você pode usar a anotação de dados INDEX Code First Data Annotations
fonte
Se não quiser usar atributos em seus POCO, você sempre pode fazer da seguinte forma:
Você pode executar esta instrução em sua
DbInitializer
classe derivada personalizada . Não conheço nenhuma forma de API fluente de fazer isso.fonte
Escrevo um método de extensão para uso em EF fluente para evitar código extra:
então use-o assim:
ou assim se o índice precisar de algumas configurações:
fonte
Você pode usar um destes
// Indexes
ou
fonte