ด้วย EF Code First Fluent API เป็นไปไม่ได้ คุณต้องมีคุณสมบัติการนำทางอย่างน้อยหนึ่งรายการเสมอเพื่อสร้างข้อ จำกัด ของคีย์นอกในฐานข้อมูล
หากคุณใช้ Code First Migrations คุณมีตัวเลือกในการเพิ่มการย้ายข้อมูลโดยใช้รหัสใหม่บนคอนโซลตัวจัดการแพ็คเกจ ( 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 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 และเพิ่มข้อ จำกัด ด้วยมือ