外部キー制約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; }
}