ฉันจะอัปเดตไฟล์ Linq เป็น SQL .dbml ได้อย่างไร
ฉันจะอัปเดตไฟล์ Linq เป็น SQL .dbml ได้อย่างไร
คำตอบ:
มีสามวิธีในการซิงค์โมเดล
ลบตารางที่แก้ไขจากตัวออกแบบและลากกลับไปที่พื้นผิวของนักออกแบบจาก Database Explorer ฉันพบว่าเพื่อให้สิ่งนี้ทำงานได้อย่างน่าเชื่อถือคุณต้อง:
ก. รีเฟรชสคีมาฐานข้อมูลใน Database Explorer (คลิกขวารีเฟรช)
b. บันทึกตัวออกแบบหลังจากลบตาราง
c. บันทึกอีกครั้งหลังจากลากตารางกลับ
โปรดทราบว่าหากคุณแก้ไขคุณสมบัติใด ๆ (เช่นปิดคุณสมบัติลูกของการเชื่อมโยง) สิ่งนี้จะสูญเสียการแก้ไขเหล่านั้นอย่างเห็นได้ชัดคุณจะต้องทำการแก้ไขอีกครั้ง
ใช้ SQLMetal เพื่อสร้างสคีมาใหม่จากฐานข้อมูลของคุณ ฉันได้เห็นจำนวนของบล็อกโพสต์ที่แสดงให้เห็นถึงวิธีการใช้สคริปต์นี้
ทำการเปลี่ยนแปลงโดยตรงในบานหน้าต่างคุณสมบัติของ DBML สิ่งนี้ใช้ได้กับการเปลี่ยนแปลงง่ายๆเช่นการอนุญาตค่าว่างในฟิลด์
ตัวออกแบบ DBML ไม่ได้ติดตั้งตามค่าเริ่มต้นใน Visual Studio 2015, 2017 หรือ 2019 คุณจะต้องปิด VS เริ่มโปรแกรมติดตั้ง VS และแก้ไขการติดตั้งของคุณ เครื่องมือLINQ to SQLเป็นคุณลักษณะที่คุณต้องติดตั้ง สำหรับ VS 2017/2019 คุณสามารถค้นหาได้ภายใต้ส่วนบุคคล> รหัสเครื่องมือ
ในการอัปเดตตารางใน. dbml-diagram ของคุณด้วยตัวอย่างเช่นคอลัมน์ที่เพิ่มเข้ามาให้ดำเนินการดังนี้:
นอกจากนี้คุณยังสามารถตรวจสอบชุดเทมเพลตการสร้างโค้ดของPLINQOโดยใช้ CodeSmith ซึ่งช่วยให้คุณสามารถทำสิ่งต่างๆมากมายสำหรับ Linq-to-SQL:
ตรวจสอบเว็บไซต์ PLINQO ที่ http://www.plinqo.com และดูวิดีโอแนะนำ
เครื่องมือที่สองที่ฉันรู้จักคือเครื่องมือHuagati DBML / EDMXซึ่งอนุญาตให้อัปเดตไฟล์การแมป DBML (Linq-to-SQL) และ EDMX (Entity Framework) และอื่น ๆ (เช่นหลักการตั้งชื่อเป็นต้น)
มาร์ค
เราใช้เทมเพลต T4 ที่เขียนขึ้นเองซึ่งจะสืบค้นโมเดล information_schema แบบไดนามิกสำหรับแต่ละตารางในไฟล์. DBML ทั้งหมดของเราจากนั้นเขียนทับบางส่วนของไฟล์. DBML ด้วยข้อมูลสคีมาใหม่จากฐานข้อมูล ฉันสูงแนะนำให้ใช้วิธีแก้ปัญหาเช่นนี้ซึ่งช่วยให้ฉันประหยัดเวลาได้มากและไม่เหมือนกับการลบและเพิ่มตารางของคุณใหม่ในแบบจำลองของคุณที่คุณจะได้รับเพื่อคงความเชื่อมโยงไว้ ด้วยโซลูชันนี้คุณจะได้รับข้อผิดพลาดเวลาคอมไพล์เมื่อสคีมาของคุณเปลี่ยนแปลง คุณต้องการตรวจสอบให้แน่ใจว่าคุณกำลังใช้ระบบควบคุมเวอร์ชันเนื่องจากความแตกต่างนั้นมีประโยชน์มาก นี่เป็นโซลูชันที่ยอดเยี่ยมที่ใช้งานได้ดีหากคุณกำลังพัฒนาด้วย DB schema แนวทางแรก แน่นอนว่าฉันไม่สามารถแบ่งปันรหัส บริษัท ของฉันได้ดังนั้นคุณจึงเป็นคนเขียนเอง แต่ถ้าคุณรู้จัก Linq-to-XML และสามารถไปโรงเรียนในโครงการนี้ได้คุณจะไปถึงที่ที่คุณต้องการได้
ฉันขอแนะนำให้ใช้ตัวออกแบบภาพที่สร้างขึ้นใน VS2008 เนื่องจากการอัปเดต dbml จะอัปเดตโค้ดที่สร้างขึ้นสำหรับคุณด้วย การแก้ไข dbml ภายนอกตัวออกแบบภาพจะส่งผลให้โค้ดที่อยู่ภายใต้การซิงค์ไม่ตรงกัน
มีความแตกต่างเล็กน้อยในการอัปเดตตารางจากนั้นอัปเดต DBML ... ความสัมพันธ์ของ Foreign Key จะไม่ถูกนำมาใช้ในทันทีหากมีการเปลี่ยนแปลงตารางที่มีอยู่ วิธีแก้ปัญหาคือการสร้างโครงการแล้วเพิ่มตารางอีกครั้ง ฉันรายงานเรื่องนี้ไปยัง MS และได้รับการแก้ไขสำหรับ VS2010
การแสดง DBML ไม่แสดงข้อ จำกัด ของ Foreign Key ใหม่
โปรดทราบว่าคำแนะนำในคำตอบหลักไม่ชัดเจน เพื่อปรับปรุงตาราง
ในกรณีของการอัพเดตกระบวนงานที่เก็บไว้คุณควรลบออกจากไฟล์. dbml และใส่เข้าไปใหม่อีกครั้ง แต่ถ้ากระบวนงานที่จัดเก็บมีสองเส้นทาง (เช่นถ้ามีบางอย่างแสดงคอลัมน์อื่นแสดงคอลัมน์อื่น) ตรวจสอบให้แน่ใจว่าทั้งสองพา ธ มีนามแฝงคอลัมน์เดียวกัน !!! มิฉะนั้นจะมีเฉพาะคอลัมน์พา ธ แรกเท่านั้น
นี่คือวิธีการทีละขั้นตอนที่สมบูรณ์ซึ่งใช้ได้ผลสำหรับฉันเพื่ออัปเดต LINQ เป็น SQL dbml และไฟล์ที่เกี่ยวข้องเพื่อรวมคอลัมน์ใหม่ที่ฉันเพิ่มลงในตารางฐานข้อมูลรายการใดรายการหนึ่ง
คุณต้องทำการเปลี่ยนแปลงพื้นผิวการออกแบบของคุณตามที่แนะนำไว้ข้างต้น อย่างไรก็ตามคุณต้องทำขั้นตอนเพิ่มเติม นี่คือขั้นตอนทั้งหมด:
ลากตารางที่อัปเดตของคุณจาก Server Explorer ไปยังพื้นผิวการออกแบบ
คัดลอกคอลัมน์ใหม่จากตาราง "ใหม่" นี้ไปยังตาราง "เก่า" (ดูคำตอบของ M463 สำหรับรายละเอียดเกี่ยวกับขั้นตอนนี้)
ลบตาราง "ใหม่" ที่คุณเพิ่งลากไป
คลิกและไฮไลต์กระบวนงานที่จัดเก็บจากนั้นลบออก
ลากกระบวนงานที่จัดเก็บใหม่แล้ววางลงในตำแหน่ง
ลบไฟล์ .designer.vb ใน code-behind ของ. dbml (หากคุณไม่ลบสิ่งนี้โค้ดของคุณที่อยู่เบื้องหลังสคีมาจะไม่อัปเดตแม้ว่าคุณจะสร้างใหม่และจะไม่รวมฟิลด์ตารางใหม่)
ทำความสะอาดและสร้างโซลูชันใหม่ (ซึ่งจะสร้างไฟล์. designer.vb ใหม่เพื่อรวมการเปลี่ยนแปลงใหม่ทั้งหมด!)