Dengan API EF Code First Fluent tidak mungkin. Anda selalu membutuhkan setidaknya satu properti navigasi untuk membuat batasan kunci asing dalam database.
Jika Anda menggunakan Migrasi Pertama Kode, Anda memiliki opsi untuk menambahkan migrasi berbasis kode baru di konsol pengelola paket ( add-migration SomeNewSchemaName
). Jika Anda mengubah sesuatu dengan model atau pemetaan, migrasi baru akan ditambahkan. Jika Anda tidak mengubah apa pun, paksa migrasi baru dengan menggunakan add-migration -IgnoreChanges SomeNewSchemaName
. Migrasi hanya akan berisi metode Up
dan kosong Down
dalam kasus ini.
Kemudian Anda dapat memodifikasi Up
metode dengan menambahkan follwing ke dalamnya:
public override void Up()
{
AddForeignKey("ChildTableName", "ParentId", "ParentTableName", "Id",
cascadeDelete: true);
CreateIndex("ChildTableName", "ParentId");
}
Menjalankan migrasi ini ( update-database
di konsol pengelolaan paket) akan menjalankan pernyataan SQL yang mirip dengan ini (untuk SQL Server):
ALTER TABLE [ChildTableName] ADD CONSTRAINT [FK_SomeName]
FOREIGN KEY ([ParentId]) REFERENCES [ParentTableName] ([Id])
CREATE INDEX [IX_SomeName] ON [ChildTableName] ([ParentId])
Atau, tanpa migrasi, Anda bisa menjalankan perintah SQL murni menggunakan
context.Database.ExecuteSqlCommand(sql);
di mana context
adalah instance dari kelas konteks turunan Anda dan sql
hanya perintah SQL di atas sebagai string.
Sadarilah bahwa dengan semua ini EF tidak memiliki petunjuk yang ParentId
merupakan kunci asing yang menggambarkan suatu hubungan. EF akan menganggapnya hanya sebagai properti skalar biasa. Entah bagaimana semua hal di atas hanyalah cara yang lebih rumit dan lebih lambat dibandingkan dengan hanya membuka alat manajemen SQL dan menambahkan batasan dengan tangan.