Restrições FOREIGN KEYForeign Key Constraints

Observação

A configuração nesta seção é aplicável a bancos de dados relacionais em geral.The configuration in this section is applicable to relational databases in general. Os métodos de extensão mostrados aqui estará disponíveis quando você instala um provedor de banco de dados relacional (devido a compartilhado Microsoft.EntityFrameworkCore.Relational pacote).The extension methods shown here will become available when you install a relational database provider (due to the shared Microsoft.EntityFrameworkCore.Relational package).

Uma restrição de chave estrangeira é apresentada para cada relação no modelo.A foreign key constraint is introduced for each relationship in the model.

ConvençõesConventions

Por convenção, as restrições de chave estrangeira são denominadas FK_<dependent type name>_<principal type name>_<foreign key property name>.By convention, foreign key constraints are named FK_<dependent type name>_<principal type name>_<foreign key property name>. Para chaves estrangeiras compostas <foreign key property name> torna-se uma lista de sublinhado separado dos nomes de propriedade de chave estrangeira.For composite foreign keys <foreign key property name> becomes an underscore separated list of foreign key property names.

Anotações de dadosData Annotations

Nomes de restrição de chave estrangeira não podem ser configurados usando as anotações de dados.Foreign key constraint names cannot be configured using data annotations.

API fluenteFluent API

Você pode usar a API fluente para configurar o nome de restrição de chave estrangeira para uma relação.You can use the Fluent API to configure the foreign key constraint name for a relationship.

class MyContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Post>()
            .HasOne(p => p.Blog)
            .WithMany(b => b.Posts)
            .HasForeignKey(p => p.BlogId)
            .HasConstraintName("ForeignKey_Post_Blog");
    }
}

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }

    public List<Post> Posts { get; set; }
}

public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }

    public int BlogId { get; set; }
    public Blog Blog { get; set; }
}