ฉันดึงข้อมูลภาพยนตร์จาก API ภายนอก ในระยะแรกฉันจะขูดภาพยนตร์แต่ละเรื่องแล้วใส่ลงในฐานข้อมูลของฉันเอง ในระยะที่สองฉันจะอัปเดตฐานข้อมูลเป็นระยะโดยใช้ API "การเปลี่ยนแปลง" ของ API ซึ่งฉันสามารถสืบค้นเพื่อดูว่าภาพยนตร์เรื่องใดที่ข้อมูลของพวกเขาเปลี่ยนไป
เลเยอร์ ORM ของฉันคือ Entity-Framework คลาสภาพยนตร์มีลักษณะดังนี้:
class Movie
{
public virtual ICollection<Language> SpokenLanguages { get; set; }
public virtual ICollection<Genre> Genres { get; set; }
public virtual ICollection<Keyword> Keywords { get; set; }
}
ปัญหาเกิดขึ้นเมื่อผมมีหนังที่ต้องมีการปรับปรุงฐานข้อมูลของฉันจะคิดว่าของวัตถุที่มีการติดตามและคนใหม่ที่ฉันได้รับจากสายการปรับปรุง API .Equals()
เป็นวัตถุที่แตกต่างกันโดยไม่คำนึงถึง
สิ่งนี้ทำให้เกิดปัญหาเพราะเมื่อฉันพยายามอัปเดตฐานข้อมูลด้วยภาพยนตร์ที่อัปเดตแล้วมันจะแทรกแทนการอัปเดตภาพยนตร์ที่มีอยู่
ฉันมีปัญหานี้มาก่อนด้วยภาษาและวิธีการแก้ปัญหาของฉันคือการค้นหาวัตถุภาษาที่แนบมาแยกพวกเขาออกจากบริบทย้าย PK ของพวกเขาไปยังวัตถุที่อัปเดตและแนบไปกับบริบท เมื่อSaveChanges()
ตอนนี้ถูกประหารชีวิตมันจะเข้ามาแทนที่
นี่เป็นวิธีการส่งกลิ่นเพราะถ้าฉันใช้วิธีนี้ต่อไปยังMovie
วัตถุของฉันหมายความว่าฉันจะต้องแยกภาพยนตร์ภาษาประเภทและคำหลักออกค้นหาแต่ละรายการในฐานข้อมูลถ่ายโอน ID และใส่ วัตถุใหม่
มีวิธีการทำสิ่งนี้อย่างสง่างามมากขึ้น? เป็นการดีที่ฉันเพียงแค่ต้องการส่งผ่านภาพยนตร์ที่อัปเดตไปยังบริบทและมีการเลือกภาพยนตร์ที่ถูกต้องเพื่ออัปเดตตามEquals()
วิธีการอัปเดตฟิลด์ทั้งหมดและสำหรับวัตถุที่ซับซ้อนแต่ละรายการ: ใช้ระเบียนที่มีอยู่อีกครั้งตามEquals()
วิธีการของตนเองมันยังไม่มีอยู่
ฉันสามารถข้ามการแยก / การติดโดยการให้.Update()
วิธีการกับวัตถุที่ซับซ้อนซึ่งฉันสามารถใช้ในการรวมกันของการดึงวัตถุที่แนบมาทั้งหมด แต่สิ่งนี้จะยังต้องให้ฉันดึงวัตถุที่มีอยู่ทุกเดียวเพื่อปรับปรุง
id
และภาพยนตร์จาก API tmdbid
ภายนอกจะถูกจับคู่กับคนในท้องถิ่นโดยใช้สนาม ฉันไม่สามารถเรียกคืนเอนทิตีทั้งหมดที่ต้องได้รับการอัปเดตในการโทรครั้งเดียวเนื่องจากเกี่ยวกับภาพยนตร์ประเภทภาษาคำหลัก ฯลฯ แต่ละรายการมี PK และอาจมีอยู่แล้วในฐานข้อมูล