ฉันเขียนสิ่งต่อไปนี้กลับมา แต่ฉันมาตรวจสอบเมื่อเร็ว ๆ นี้และตอนนี้ไม่คิดว่ามันจะเป็นการออกแบบที่ดี
การออกแบบสำหรับชั้นฐานข้อมูลแบบแยกส่วนโดยใช้ Entity Framework 4 มีวัตถุฐานข้อมูลเดียวซึ่งโหลดกรอบ (เอนทิตี้ของ) เอนทิตีกรอบบริบทจากไลบรารีภายนอกในตำแหน่งที่ระบุและอินสแตนซ์ของบริบทที่โหลดจะถูกเก็บไว้ในตารางแฮช ชื่อของพวกเขา (EG "ContentMgmtContext")
การติดต่อกับฐานข้อมูลทั้งหมดในระบบนี้ผ่านขั้นตอนการจัดเก็บ ในการโทรไปยังฐานข้อมูลลายเซ็นวิธีการสืบค้นจะมีลักษณะดังนี้
List<TReturn> Query<TReturn>(string Context,
string Procedure,
TransactionScope Scope,
List<ObjectParameter> QueryParameters)
ต้นแบบนี้เป็นสิ่งที่ฉันชอบ อย่างไรก็ตามมีข้อเสียเปรียบที่สำคัญอย่างหนึ่งสำหรับวิธีนี้: when using the database layer, the code using it has to have a reference to the library in which the context is stored, in order to access the types returned by the stored procedures through Entity Framework.
ในโมเดลวัตถุจากเลเยอร์ฐานข้อมูลจะถูกแปลเป็นวัตถุใหม่ที่มุมมองและตัวควบคุมใช้
ฉันคิดว่านี่เป็นการออกแบบที่ไม่ดี แต่ฉันจะปรับปรุงได้อย่างไร ฉันได้พิจารณาการเพิ่มอินเตอร์เฟสว่าง ๆ ที่ต้องการIStoredProecedureObject
ให้ทุกชนิดข้อมูลที่ส่งคืนโดยโพรซีเดอร์ที่เก็บไว้เป็นประเภทพื้นฐานทั่วไปอย่างไรก็ตามสิ่งนี้ดูเหมือนจะถูกทำลายโดย Entity Framework ทุกครั้งที่.edmx
ไฟล์ถูกคอมไพล์ใหม่รหัสจะถูกสร้างขึ้นใหม่และลบส่วนที่เพิ่มเติมออก มีวิธีใดบ้างที่จะหยุดสิ่งนี้ได้?
ฉันจะปรับปรุงการออกแบบนี้ได้อย่างไร เกิดอะไรขึ้นกับมัน? หรือฉันถูกทาง?