Entity Framework - เพิ่มคุณสมบัติการนำทางด้วยตนเอง


115

ฉันสร้าง Entity Framework Model (4.0) จากฐานข้อมูลของฉัน ฉันไม่ได้ออกแบบฐานข้อมูลและไม่มีการควบคุมสคีมา แต่มีตารางไม่กี่ตารางที่ไม่มีการกำหนดข้อ จำกัด ของคีย์ต่างประเทศ แต่มีการกำหนดความสัมพันธ์โดยนัย

ตัวอย่างเช่น:

ฉันมีตารางชื่อ People ที่มีคอลัมน์ต่อไปนี้: GenderID RaceID

มีตารางสำหรับทั้ง Gender และ Race แต่ไม่มี Foreign Key ในตาราง People

เมื่อฉันนำเข้าโมเดลมันไม่ได้เพิ่มคุณสมบัติการนำทางสำหรับความสัมพันธ์เหล่านี้ ฉันพยายามเพิ่มด้วยตนเอง แต่ From Role and To Role ถูกปิดใช้งาน ฉันไม่แน่ใจว่าจะเพิ่มความสัมพันธ์ด้วยตัวเองอย่างไร ฉันต้องทำอย่างไร

คำตอบ:


181

ใช่ - มันไม่ตรงไปตรงมา

นี่คือสิ่งที่คุณทำ:

1 - คลิกขวาที่ตัวออกแบบเพิ่ม -> สมาคม

2 - ตั้งค่าการเชื่อมโยงและความสำคัญ (People * .. 1 Gender, People * .. 1 Race)

3 - ไปที่Model Browser -> Association

4 - คลิกขวาที่การเชื่อมโยงที่คุณสร้างขึ้นใหม่คลิกคุณสมบัติ

5 - ที่นี่คุณต้องตั้งค่าจุดสิ้นสุดสำหรับตัวเลือกคีย์และน้ำตก ตรวจสอบให้แน่ใจว่าคุณได้รับจุดสิ้นสุดที่ถูกต้อง คุณยังสามารถตั้งค่าข้อ จำกัด ในการอ้างอิงได้ที่นี่สำหรับคุณสมบัติการนำทางโดยปริยายของคุณ

6 - แมปคุณสมบัติการนำทางกับตาราง / ฟิลด์ที่เกี่ยวข้อง

7 - ตรวจสอบโมเดลของคุณข้ามนิ้วของคุณ

หวังว่านี่จะช่วยได้


20
+1 เพื่อประหยัดสิ่งที่เหลืออยู่ของผม ฉันจะเพิ่ม # 6 ต้องเปลี่ยนคอลัมน์คีย์นอกในหน้าคุณสมบัติของการเชื่อมโยงการตั้งค่าข้อ จำกัด การอ้างอิง กดปุ่ม [... ] เพื่อเปิดกล่องโต้ตอบข้อ จำกัด การอ้างอิงและเปลี่ยนฟิลด์จำลองที่นักออกแบบเสียบเข้ากับตารางลูกภายใต้คุณสมบัติที่อ้างอิง
Joel Brown

8
นอกจากนี้คุณจะต้องไปที่คุณสมบัติของตารางลูกและลบช่องจำลองที่ผู้ออกแบบเพิ่มเข้ามา (ซึ่งไม่ได้จับคู่กับเขตข้อมูลจริงใด ๆ ในตารางลูก)
Joel Brown

2
ในกรณีของ View ตรวจสอบให้แน่ใจว่าคุณได้รับนิยามคีย์หลักของคุณถูกต้อง (คลิกขวาเลือกฟิลด์ที่เกี่ยวข้องทำเครื่องหมายเป็น EntityKey ในคุณสมบัติ) มิฉะนั้นคุณอาจได้รับ 'Multiplicity is not valid in Role in relationship เนื่องจาก Dependent Role อ้างถึงคุณสมบัติที่สำคัญ ... '
Mikl X

1
ใน # 2 คุณอาจต้องแน่ใจว่าได้ยกเลิกการเลือกช่องทำเครื่องหมาย "เพิ่มคุณสมบัติคีย์ต่างประเทศในเอนทิตี" ซึ่งจะสร้างความปวดหัวโดยไม่จำเป็นหากคุณไม่ต้องการมันจริงๆ
เข้ารหัส

เมื่อคุณอัปเดตโมเดลของคุณอีกครั้งจากฐานข้อมูลเอนทิตีแบบนั่งร้านจะรักษาการเชื่อมโยงที่เพิ่มด้วยตนเอง?
voodoo_patch

45

ฉันเจอบล็อกโพสต์นี้ซึ่งเสนอวิธีแก้ปัญหาต่อไปนี้ซึ่งใช้ได้ผลดีสำหรับฉัน (น่าเสียดายที่ฉันไม่สามารถทำให้ RPM1984 ทำงานได้ในสถานการณ์ของฉัน)

  1. เพิ่มการเชื่อมโยงผ่านพื้นหลังของนักออกแบบคลิกขวาที่เมนูตามบริบท
  2. ตั้งค่าการเชื่อมโยงของคุณ (อย่าลืมยกเลิกการเลือกการสร้างคีย์ต่างประเทศ)
  3. คลิกขวาที่การเชื่อมโยงและเลือกคุณสมบัติ
  4. คลิกที่...ปุ่มสำหรับ Referential Constraint
  5. ตั้งค่าความสัมพันธ์ระหว่างคีย์ภายใน
  6. ตรวจสอบ (จากเมนูตามบริบทของผู้ออกแบบ)
  7. ???
  8. กำไร!

4
+1 จุด 4 ให้ฉันทำถูกต้องมองข้ามสิ่งนั้นไปด้วยคำตอบ RPM194
Hugo Logmans
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.