EF Code First Fluent APIでは、それは不可能です。データベースに外部キー制約を作成するには、常に少なくとも1つのナビゲーションプロパティが必要です。
コードファーストマイグレーションを使用している場合は、パッケージマネージャーコンソール(add-migration SomeNewSchemaName)で新しいコードベースのマイグレーションを追加するオプションがあります。モデルまたはマッピングで何かを変更した場合、新しい移行が追加されます。何も変更しなかった場合は、を使用して新しい移行を強制しadd-migration -IgnoreChanges SomeNewSchemaNameます。この場合Up、移行には空のDownメソッドとメソッドのみが含まれます。
次にUp、以下を追加してメソッドを変更できます。
public override void Up()
{
AddForeignKey("ChildTableName", "ParentId", "ParentTableName", "Id",
cascadeDelete: true);
CreateIndex("ChildTableName", "ParentId");
}
この移行を(update-databaseパッケージ管理コンソールで)実行すると、次のようなSQLステートメントが実行されます(SQL Serverの場合)。
ALTER TABLE [ChildTableName] ADD CONSTRAINT [FK_SomeName]
FOREIGN KEY ([ParentId]) REFERENCES [ParentTableName] ([Id])
CREATE INDEX [IX_SomeName] ON [ChildTableName] ([ParentId])
または、移行せずに、を使用して純粋なSQLコマンドを実行することもできます。
context.Database.ExecuteSqlCommand(sql);
ここで、contextは派生コンテキストクラスのインスタンスであり、sql文字列としての上記のSQLコマンドです。
このすべてで、EFにはParentId関係を説明する外部キーである手がかりがないことに注意してください。EFはそれを通常のスカラープロパティとしてのみ見なします。どういうわけか、上記のすべては、SQL管理ツールを開いて手動で制約を追加する場合に比べて、より複雑で時間がかかる方法にすぎません。