外部キー制約Foreign Key Constraints

注意

このセクションの構成は、リレーショナル データベース全般に適用されます。The configuration in this section is applicable to relational databases in general. ここに示す拡張方法は、リレーショナル データベース プロバイダーをインストールすると (共有 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).

モデル内の各リレーションシップの外部キー制約が導入されました。A foreign key constraint is introduced for each relationship in the model.

規約Conventions

慣例により、外部キー制約の名前は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>. 複合外部キーの<foreign key property name>は外部キー プロパティ名、アンダー スコア区切りリストになります。For composite foreign keys <foreign key property name> becomes an underscore separated list of foreign key property names.

データの注釈Data Annotations

データ注釈を使用して外部キー制約名を構成することはできません。Foreign key constraint names cannot be configured using data annotations.

Fluent APIFluent API

Fluent API を使用して、リレーションシップの外部キー制約名を構成することができます。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; }
}