นี่เป็นเพราะวิธีการทำงานของ EF4 กับโมเดลแรก
เมื่อคุณสร้างโมเดลรุ่นแรกเป็นครั้งแรกจะอยู่ในสถานะที่ไม่มี SSDL คุณสามารถลากเอนทิตีเชื่อมโยงและอื่น ๆ ได้และหากคุณดู SSDL ในไฟล์ EDMX คุณจะเห็นว่าไม่มีเอนทิตีใดที่มีตารางพื้นที่เก็บข้อมูลที่เกี่ยวข้องใน SSDL
ซึ่งจะเปลี่ยนแปลงเมื่อคุณคลิกGenerate Database From Model
รายการเมนูบริบท ส่วนที่ทำให้สับสนคือการกระทำนี้ทำมากกว่าแค่การสร้างสคริปต์ DDL ในความเป็นจริงมันเปลี่ยนไฟล์ EDMX เพื่อรวมข้อมูล SSDL จากจุดนี้ไฟล์ EDMX จะเข้าสู่สถานะที่ทุกเอนทิตีในตัวออกแบบ / CSDL ต้องแมปกับเอนทิตีใน SSDL หากไม่มีการแมปจะทำให้เกิดข้อผิดพลาดเวลาคอมไพล์:
ไม่ได้ระบุการแมปสำหรับ EntitySet / AssociationSet ต่อไปนี้ - (EntityName)
ข้อเท็จจริงที่น่าสนใจอีกประการหนึ่งคือไม่ใช่ข้อผิดพลาดที่จะป้องกันการคอมไพล์ มันจะสร้างไลบรารีคลาสเอาต์พุต มันควรจะเตือนหรืออะไร?
เพื่อป้องกันข้อผิดพลาดนี้สิ่งที่คุณต้องทำหลังจากแทรกเอนทิตีใหม่คือการทำGenerate Database From Model
อีกครั้ง ซึ่งจะอัปเดต SSDL และแก้ไขการแมป
แก้ไข
หากคุณไม่ได้ใช้ model-first และคุณ "อัปเดตจากฐานข้อมูล" คุณจะมีข้อผิดพลาดนี้เช่นกันในกรณีที่คุณลบตารางใน DB Server เนื่องจาก Entity Framework จะไม่ลบเอนทิตีให้คุณโดยอัตโนมัติ ลบเอนทิตีด้วยตนเองและข้อผิดพลาดจะหายไป