ADO.NET Entity Framework: Update Wizard จะไม่เพิ่มตาราง


93

ฉันเพิ่ม ADO.Net Entity Data Model ใหม่ในโครงการของฉันและใช้Update Wizardเพื่อเพิ่มตารางลงในโมเดล ตารางที่เลือกห้าตารางถูกเพิ่มลงในพื้นผิวการออกแบบ อีกสองโต๊ะจะไม่เพิ่ม ฉันเลือกสิ่งเหล่านี้ในวิซาร์ดและคลิกเสร็จสิ้น แต่ก็ไม่ปรากฏบนพื้นผิวการออกแบบ

นี่เป็นข้อบกพร่องหรือมีบางสถานการณ์ที่ไม่สามารถเพิ่มตารางลงในโมเดลได้ (โดยการออกแบบ)?


UPDATE: XML (* .edmx) เปิดเผยปัญหา

<!--Errors Found During Generation:
warning 6013: The table/view 'FooBar.dbo.Roles' does not 
have a primary key defined and no valid primary key could be inferred. 
This table/view has been excluded. To use the entity you will need to 
review your schema, add the correct keys and uncomment it.-->
<!--<EntityType Name="Roles">
    <Property Name="role_id" Type="decimal" />
    <Property Name="role_desc" Type="nvarchar" MaxLength="30" />
</EntityType>-->

8
สิ่งนี้ควรมีวิธีการโหวตเพิ่มขึ้น ฉันไม่รู้ว่า Visual Studio ไม่สามารถเพิ่มตารางได้เนื่องจากไฟล์. edmx เป็นที่เดียวที่เกิดข้อผิดพลาด หวังว่าพวกเขาจะมีกล่องโต้ตอบใน v2!
John Bubriski

+1 - ในกรณีของฉันไม่มีข้อความแสดงข้อผิดพลาด
teynon

ดังที่คุณทราบตารางที่จะไม่นำเข้าไม่มีคีย์หลัก เพิ่ม PK และคุณก็พร้อมแล้ว
Eric

คำตอบ:


46

พื้นผิวการออกแบบแตกต่างจากแบบจำลองเอนทิตี เป็นไปได้ที่จะมีตารางในการทำแผนที่ใน EDMX ของคุณซึ่งไม่ปรากฏบนพื้นผิวการออกแบบ ดูไฟล์เป็น XML เพื่อดูว่าเป็นกรณีนี้หรือไม่ ในกรณีนี้ตัวช่วยสร้างการอัปเดตจะไม่อนุญาตให้คุณเพิ่มตารางอีกครั้งเนื่องจากเป็นส่วนหนึ่งของโมเดลเอนทิตีแล้ว ดังนั้นโดยทั่วไปแล้วตัวช่วยสร้างการอัปเดตจะรู้เพิ่มเติมเกี่ยวกับโมเดลเอนทิตีของคุณมากกว่าที่จะเกี่ยวกับพื้นผิวการออกแบบต่อตัว

ฉันไม่คิดว่านั่นเป็นสถานการณ์ที่คุณอยู่ แต่ควรให้แนวคิดทั่วไปสำหรับการแก้ปัญหา: ไปที่ XML และค้นหาการอ้างอิงถึงตารางที่เป็นปัญหา


4
ฉันเพิ่งมีปัญหานี้ฉันลบตารางออกจากแบบจำลองและเมื่อฉันไปเพิ่มอีกครั้งนักออกแบบภาพไม่แสดงว่าอยู่ในฐานข้อมูล ในการปัดเศษฉันได้ลบข้อความออกจากไฟล์. edmx แต่จัดการเพื่อทำให้ XML ยุ่งเหยิง หากคุณทำเช่นนี้โปรดสำรองไฟล์ไว้ก่อนในกรณีนี้ โชคดีที่ฉันสามารถค้นหาแท็กที่ยุ่งเหยิงด้วย git diff
GrandMasterFlush

42

ตั้งค่าคีย์หลักเป็นตารางทั้งหมดหรือช่องทำเครื่องหมาย "อนุญาตค่าว่าง" เพียงช่องเดียวที่ไม่ได้ทำเครื่องหมายไว้ที่คอลัมน์ใดก็ได้ของแต่ละตาราง ได้ผลสำหรับฉัน :)


2
สิ่งนี้ฉันเชื่อว่าเป็นคำตอบที่ถูกต้องอย่างน้อยก็สำหรับฉัน ขอบคุณ!
Eric

@Parvinder ฉันได้ต่อสู้กับปัญหานี้ในโครงการส่วนใหญ่ของฉัน ในที่สุดคำตอบของคุณก็ชัดเจนสำหรับฉัน ในกรณีของฉันในการเข้าร่วมตารางฉันไม่ได้ระบุฟิลด์คีย์ที่ไม่เป็นค่าว่างหรือแค่คีย์หลัก หลังจากแก้ไขปัญหานี้แล้วฉันก็สบายใจ ขอบคุณมาก
PatsonLeaner

สิ่งที่ฉันเข้าใจเกี่ยวกับความละเอียดก็คือเราไม่สามารถเพิ่มตารางลงใน Entity Model ได้ถ้าฉัน) ตารางนั้นไม่มีคีย์หลักหรือ (ii) ไม่มีคอลัมน์ Allow Null ในตารางนั้น
Murtuza Khan

10

1. เปลี่ยนโครงสร้างตารางและเพิ่มคอลัมน์หลัก อัปเดตโมเดล

2. แก้ไขไฟล์. EDMX ใน XML Editor และลองเพิ่มคอลัมน์ใหม่ใต้แท็กสำหรับตารางเฉพาะนี้ (จะไม่ทำงาน)

3. แทนที่จะสร้างคอลัมน์หลักใหม่เพื่อออกจากตารางฉันจะสร้างคีย์ผสมโดยการเชื่อมโยงคอลัมน์ที่มีอยู่ทั้งหมด (ทำงาน)

Entity Framework: การเพิ่ม DataTable โดยไม่มีคีย์หลักให้กับ Entity Model


ฉันพบปัญหาเดียวกันนี้ โมเดลเอนทิตีกำลังเพิ่มตารางอย่างไรก็ตามมันไม่ได้แสดงในตัวออกแบบ ฉันไม่สามารถเข้าถึงได้ในรหัส ฉันเพิ่มคีย์ฟิลด์ ID ... ได้ผล!
ราวีราม

6

ฉันมีปัญหานี้เช่นกันทั้งหมดข้างต้นไม่ได้ผลสำหรับฉัน สิ่งที่ช่วยให้ฉันมีดังต่อไปนี้

เมื่อคุณพยายามเชื่อมต่อกับฐานข้อมูลที่ฐานข้อมูลสามารถมีผู้ใช้ที่แตกต่างกันโดยมีข้อมูลประจำตัวที่แตกต่างกันก็สามารถยอมรับ สมมติว่าผู้ใช้ A ถึง D.

หากคุณพยายามเชื่อมต่อกับผู้ใช้ตรวจสอบให้แน่ใจว่าผู้ใช้เปิดใช้งานข้อมูลรับรองที่ถูกต้องในกรณีนี้ให้เปิดใช้งานตัวเลือกการอ่านและเขียน

ในการเริ่มต้น MS SQL Server Managment Studio โดยเชื่อมต่อกับเซิร์ฟเวอร์ SQL ของคุณและเลือกฐานข้อมูลที่คุณพยายามเชื่อมต่อใน Visual Studio ภายใต้ 'your_dbname' -> ความปลอดภัย -> ผู้ใช้คุณจะพบรายชื่อผู้ใช้ คลิกขวาที่ชื่อผู้ใช้ที่คุณพยายามเข้าสู่ระบบและเลือกคุณสมบัติ หน้าต่างจะเปิดขึ้น เลือกหน้า 'ทั่วไป' (เลือกโดยค่าเริ่มต้น) และในแท็บ 'การเป็นสมาชิกบทบาทฐานข้อมูล' ตรวจสอบให้แน่ใจว่าได้เลือก 'db_datareader' และ 'db_datawrite'

หมายเหตุ: เมื่อคุณเข้าสู่ระบบด้วย MS SQL Server Managment Studio ตรวจสอบให้แน่ใจว่าคุณเข้าสู่ระบบด้วยผู้ใช้ที่สามารถเปิด / ปิดตัวเลือกเหล่านี้ได้ ...


5

ตรวจสอบ 'Nulls' ในตารางเฉพาะของคุณ หากคอลัมน์ทั้งหมดถูกตั้งค่าเป็น 'Allow Null' Entity Framework จะถือว่าเป็นตาราง 'Null' ฉันมีปัญหาเดียวกันและไม่ได้เลือก 'Allow Null' และเพิ่มตารางที่ต้องการ


1
มันใช้งานได้โง่ไม่มีข้อผิดพลาดหรือคำเตือนปรากฏในบันทึก!
RolandoCC


1

วิธีแก้ปัญหาของฉันคือการลบโมเดลทั้งหมดและอ่านรวมถึงตารางใหม่ที่ฉันต้องการ

ฉันลบตารางในตัวออกแบบโดยไม่ได้ตั้งใจเพียงครั้งเดียวและไม่สามารถอ่านได้ ดังนั้นจึงลบแบบจำลองทั้งหมดและอ่าน

ฉันมีปัญหาบางอย่างกับสิ่งนี้เช่นกัน ( Ado.Net Entity Data Model ไม่อัปเดตอย่างถูกต้อง )


1

สิ่งนี้ได้รับการแก้ไขแล้วในเวอร์ชันล่าสุด (สภาพแวดล้อม: VS 2012, .net framework 4.5) เปิดไฟล์. edmx อย่างง่ายและเพิ่มตาราง / กระบวนงาน / มุมมองที่ต้องการ ตาราง / มุมมองที่ไม่มีคีย์หลักจะถูกสร้างเป็นตาราง / มุมมองแบบอ่านอย่างเดียว

ตาราง / มุมมอง "TABLE_NAME" ไม่มีคีย์หลักที่กำหนดไว้ คีย์ได้รับการอนุมานและคำจำกัดความถูกสร้างขึ้นเป็นตาราง / มุมมองแบบอ่านอย่างเดียว


1
ข้อผิดพลาดยังคงอยู่ในบางกรณีเหตุการณ์ใน EF 5.0
Greg Z

0

คุณไม่จำเป็นต้องลบทั้งโมเดล (ซึ่งอาจมีหลายร้อยตาราง!)

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

SO: ลบตารางที่เป็นปัญหาจาก Model (โหมดแนวคิด) และจาก Model.Store จากนั้นอัปเดตโมเดลโดยใช้ตัวช่วยสร้างและเพิ่มเฉพาะตารางที่เป็นปัญหา


0

เพียงแค่โยนรายละเอียดเพิ่มเติมสำหรับใครก็ตามที่ไม่เคยทำมาก่อน ฉันใช้ Visual Studio 2013 ที่ติดตั้งอัปเดต 4 ฉันเพิ่มฟิลด์บางส่วนลงในตารางลบตารางออกจากโมเดลของฉันจากนั้นไปอัปเดตและจะไม่ให้ฉันตรวจสอบตารางใด ๆ

ฉันมีคีย์หลัก

ฉันสร้างตารางทดสอบใหม่ที่ปรากฏขึ้นและจะให้ฉันตรวจสอบ แต่ไม่ใช่ตารางเดิมของฉัน

ฉันไม่เคยเปิดใน XML มาก่อนและไม่รู้ว่าต้องทำอย่างไร คุณคลิกขวาที่ไฟล์. edmx และ "เปิดด้วย" - เลือกตัวแก้ไข xml

ตารางที่เป็นปัญหาอยู่ตรงนั้นมันมีช่องใหม่ด้วยซ้ำ (แปลก ๆ )

ฉันลบการอ้างอิงทั้งหมดไปแล้ว (ใช้เวลาสองสามครั้ง) - หลังจากที่คุณลบและบันทึกหากคุณพยายามเปิดและจะไม่แสดงเพียงแค่เลือก "ดู XML" - ดูข้อผิดพลาดและโดยพื้นฐานแล้ว ตามลูกบอลใหญ่จนกว่าคุณจะทำความสะอาดได้

หวังว่ารายละเอียดเพิ่มเติมจะช่วยใครสักคน

โจ


0

วิธีง่ายๆอย่างหนึ่งที่ฉันพบคือ (ใน SQL Server Management Studio) เพิ่มคอลัมน์ ID ของประเภท INT ยกเลิกการเลือก "Allow Nulls" และภายใต้คุณสมบัติของคอลัมน์ (ของ ID) >> ข้อมูลจำเพาะข้อมูลประจำตัว >> ตรวจสอบ (Is Identity) และทำการ แน่ใจว่าได้ตั้งค่าส่วนเพิ่มแล้ว

เมื่อดำเนินการข้างต้นเสร็จแล้วให้กลับไปที่หน้าต่าง. edmx คลิกขวาและอัปเดตโมเดลจากฐานข้อมูล


0

คุณสามารถเพิ่มตารางไขว้คอลัมน์คีย์หลัก จากนั้นปัญหากำลังได้รับการแก้ไข


0

อีกวิธีหนึ่งคือเพื่อให้แน่ใจว่าบัญชีที่คุณกำลังเข้าถึงฐานข้อมูลมีสิทธิ์บางอย่างในตารางเลือกอย่างน้อย ตารางจะไม่ถูกเพิ่มหากบัญชีไม่มีสิทธิ์

ใน SSMS ภายใต้ความปลอดภัยให้คลิกขวาที่ผู้ใช้หรือบทบาทจากนั้นจึงเลือกคุณสมบัติ จากนั้นคลิกที่ Securables ตารางด้านบนแสดงตารางที่สามารถเข้าถึงได้ในปัจจุบัน หากไม่มีตารางที่หายไปให้คลิกที่ค้นหาแล้วค้นหาจากนั้นไฮไลต์ตารางด้านบนจากนั้นกำหนดสิทธิ์ในตารางด้านล่าง

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