EF Code First Fluent API ile bu imkansızdır. Veritabanında yabancı anahtar kısıtlaması oluşturmak için her zaman en az bir gezinti özelliğine ihtiyacınız vardır.
Code First Migrations kullanıyorsanız, paket yöneticisi konsolunda ( add-migration SomeNewSchemaName) yeni bir kod tabanlı geçiş ekleme seçeneğiniz vardır . Modelinizle veya eşlemenizle bir şey değiştirdiyseniz, yeni bir geçiş eklenecektir. Hiçbir şeyi değiştirmediyseniz kullanarak yeni bir geçişi zorlayın add-migration -IgnoreChanges SomeNewSchemaName. Taşıma, bu durumda yalnızca boş Upve Downyöntemleri içerecektir .
Ardından Up, aşağıdaki ifadeyi ekleyerek yöntemi değiştirebilirsiniz :
public override void Up()
{
AddForeignKey("ChildTableName", "ParentId", "ParentTableName", "Id",
cascadeDelete: true);
CreateIndex("ChildTableName", "ParentId");
}
Bu geçişi çalıştırmak ( update-databasepaket yönetim konsolunda) şuna benzer bir SQL ifadesi çalıştırır (SQL Server için):
ALTER TABLE [ChildTableName] ADD CONSTRAINT [FK_SomeName]
FOREIGN KEY ([ParentId]) REFERENCES [ParentTableName] ([Id])
CREATE INDEX [IX_SomeName] ON [ChildTableName] ([ParentId])
Alternatif olarak, geçişler olmadan, yalnızca bir SQL komutunu kullanarak çalıştırabilirsiniz.
context.Database.ExecuteSqlCommand(sql);
burada contexttüretilmiş bağlam sınıfınızın bir örneğidir ve sqldize olarak yukarıdaki SQL komutudur.
Tüm bu EF ile ParentIdbir ilişkiyi tanımlayan yabancı anahtarın hiçbir ipucu olmadığını unutmayın . EF bunu yalnızca sıradan bir skaler özellik olarak değerlendirecektir. Her nasılsa yukarıdakilerin tümü, bir SQL yönetim aracını açmaya ve kısıtlamayı elle eklemeye kıyasla yalnızca daha karmaşık ve daha yavaş bir yoldur.