ईएफ कोड प्रथम धाराप्रवाह एपीआई के साथ यह असंभव है। डेटाबेस में एक विदेशी कुंजी बाधा बनाने के लिए आपको हमेशा कम से कम एक नेविगेशन संपत्ति की आवश्यकता होती है।
यदि आप कोड फर्स्ट माइग्रेशन का उपयोग कर रहे हैं तो आपके पास पैकेज मैनेजर कंसोल ( add-migration SomeNewSchemaName
) पर एक नया कोड आधारित माइग्रेशन जोड़ने का विकल्प है । यदि आपने अपने मॉडल के साथ कुछ बदल दिया है या एक नया माइग्रेशन जोड़ा जाएगा। यदि आपने कुछ भी नहीं बदला है तो एक नए माइग्रेशन का उपयोग करके बाध्य करें add-migration -IgnoreChanges SomeNewSchemaName
। माइग्रेशन में केवल इस मामले में रिक्त Up
और Down
विधियाँ होंगी ।
फिर आप Up
इसमें follwing जोड़कर विधि को संशोधित कर सकते हैं :
public override void Up()
{
AddForeignKey("ChildTableName", "ParentId", "ParentTableName", "Id",
cascadeDelete: true);
CreateIndex("ChildTableName", "ParentId");
}
इस माइग्रेशन update-database
को चलाने ( पैकेज मैनेज कंसोल पर) इसी तरह (SQL सर्वर के लिए) एक SQL स्टेटमेंट चलाएगा:
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 कमांड है।
विदित हो कि इस सब के साथ ईएफ का कोई सुराग नहीं है जो ParentId
एक विदेशी कुंजी है जो एक रिश्ते का वर्णन करती है। ईएफ इसे केवल एक साधारण स्केलर संपत्ति के रूप में मानेगा। किसी तरह सभी ऊपर केवल एक SQL प्रबंधन उपकरण खोलने और बाधा को हाथ से जोड़ने की तुलना में केवल एक अधिक जटिल और धीमा तरीका है।