การใช้งานระยะไกลและ DI สำหรับ DbContext ใน EF Core (3.0)

ฉันต้องการแยกฐานข้อมูล "หลัก" เป็นบริการบนเครื่องแยกและเข้าถึงผ่าน TCP/IP หรือเลเยอร์การเชื่อมต่ออื่นจากบริการอื่น ๆ ที่ต้องการข้อมูลจากฐานข้อมูล (การเชื่อมต่อฐานข้อมูลระยะไกล) ในบริการฐานข้อมูลฉันต้องการสร้าง dbcontext ในหน่วยความจำซึ่งจะแทนที่คำขอฐานข้อมูล dbcontext โดย DI

ใครช่วยอธิบายวิธีที่ดีที่สุดและถูกต้องให้ฉันได้ไหม เป็นไปได้ว่ามีบางโปรเจ็กต์บน GitHub หรือฟังก์ชันนี้สามารถพบได้ใน EF Core (3.0) "นอกกรอบ"

ขอบคุณ


person Dmitriy    schedule 23.07.2019    source แหล่งที่มา


คำตอบ (1)


คำถามที่เหลือของคุณเข้าใจได้ (แม้ว่าจะกว้างๆ) แต่คุณทำให้ฉันแพ้ด้วย:

ในบริการฐานข้อมูลฉันต้องการสร้าง dbcontext ในหน่วยความจำซึ่งจะแทนที่คำขอฐานข้อมูล dbcontext โดย DI

คุณสามารถสร้างบริการ HTTP เพื่อใช้ในการคงอยู่แทนการใช้ DbContext โดยตรงได้อย่างแน่นอน โดยพื้นฐานแล้วไมโครเซอร์วิสคืออะไร อย่างไรก็ตาม คุณจะต้องโต้ตอบกับบริการนั้นผ่านทาง ลูกค้า ในกรณีของบริการ HTTP หรือ API ตามที่เรียกกันโดยทั่วไป ไคลเอนต์นั้นจะเป็น HttpClient ดูเหมือนว่าคุณยังต้องการใช้ DbContext ต่อไป แต่ให้โต้ตอบกับบริการนี้โดยซ่อนเร้น นั่นเป็นไปไม่ได้

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

person Chris Pratt    schedule 23.07.2019
comment
ในบริการฐานข้อมูลฉันต้องการสร้าง dbcontext ในหน่วยความจำซึ่งย่อยคำขอฐานข้อมูล dbcontext โดย DI - ฉันหมายความว่าฉันต้องการใช้คลาสที่ได้รับ DbContext เดียวกันสำหรับ 2 อินสแตนซ์ หนึ่งเก็บข้อมูลในฐานข้อมูลหน่วยความจำ อีกอันเก็บข้อมูลในฐานข้อมูลบนดิสก์ จากฐานข้อมูลแรกตามงานที่กำหนดเวลาไว้ ฐานข้อมูลในหน่วยความจำเป็นแคชที่มีตรรกะแบบกำหนดเองที่ฉันต้องการอธิบายด้วยตัวเอง - person Dmitriy; 23.07.2019
comment
ดังนั้นวิธีที่ดีที่สุดในการรับรู้ไคลเอนต์ - ผ่าน MVC Controller หรือ gRPC คืออะไร - person Dmitriy; 23.07.2019
comment
ไม่มีวิธีที่ดีที่สุด สิ่งที่ดีที่สุดสำหรับคุณ ทีม องค์กร และแอปของคุณ ไม่มีใครสามารถโทรหาคุณได้ ค้นคว้าวิธีการต่างๆ และตัดสินใจ - person Chris Pratt; 23.07.2019
comment
อย่างที่ฉันพูดไป มันคล้ายกันในทางทฤษฎีกับสถาปัตยกรรมไมโครเซอร์วิส ดังนั้นโดยพื้นฐานแล้วนั่นคือรูปแบบการออกแบบของคุณ แต่มีหลายวิธีจริงๆ ที่สามารถทำได้ด้วยการผสมผสานพื้นที่เก็บข้อมูลแบ็กเอนด์ ผู้ให้บริการ เฟรมเวิร์ก ไลบรารี โปรโตคอล ส่วนประกอบเครือข่าย ฯลฯ - person Chris Pratt; 23.07.2019