Contraintes de clé étrangèreForeign Key Constraints

Note

La configuration indiquée dans cette section s’applique aux bases de données relationnelles en général.The configuration in this section is applicable to relational databases in general. Les méthodes d’extension indiquées ici sont disponibles quand vous installez un fournisseur de base de données relationnelle (en raison du package partagé Microsoft.EntityFrameworkCore.Relational).The extension methods shown here will become available when you install a relational database provider (due to the shared Microsoft.EntityFrameworkCore.Relational package).

Une contrainte de clé étrangère est introduite pour chaque relation dans le modèle.A foreign key constraint is introduced for each relationship in the model.

ConventionsConventions

Par convention, les contraintes de clé étrangère sont nommés 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>. Pour les clés étrangères composites <foreign key property name> devient une liste séparée par des traits de soulignement des noms de propriété de clé étrangère.For composite foreign keys <foreign key property name> becomes an underscore separated list of foreign key property names.

Annotations de donnéesData Annotations

Les noms de contrainte de clé étrangère ne peut pas être configurés à l’aide des annotations de données.Foreign key constraint names cannot be configured using data annotations.

API FluentFluent API

Vous pouvez utiliser l’API Fluent pour configurer le nom de la contrainte de clé étrangère d’une relation.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; }
}