আমি একটি বাহ্যিক এপিআই থেকে মুভি ডেটা পুনরুদ্ধার করি। প্রথম পর্যায়ে আমি প্রতিটি মুভি স্ক্র্যাপ করব এবং এটিকে আমার নিজের ডাটাবেসে প্রবেশ করিয়ে দেব। দ্বিতীয় ধাপে আমি পর্যায়ক্রমে এপিআইয়ের "পরিবর্তনগুলি" এপিআই ব্যবহার করে আমার ডেটাবেস আপডেট করব যা কোন চলচ্চিত্রের তথ্য পরিবর্তন হয়েছিল তা দেখার জন্য আমি জিজ্ঞাসা করতে পারি।
আমার ORM স্তরটি হ'ল সত্ত্বা-ফ্রেমওয়ার্ক। মুভি ক্লাসটি দেখতে এমন দেখাচ্ছে:
class Movie
{
public virtual ICollection<Language> SpokenLanguages { get; set; }
public virtual ICollection<Genre> Genres { get; set; }
public virtual ICollection<Keyword> Keywords { get; set; }
}
সমস্যা দেখা দেয় দুটো কারণে যখন আমি একটি চলচ্চিত্র আপডেট করা প্রয়োজন আছে: আমার ডাটাবেসের বস্তুর মনে হবে ট্র্যাক করা হচ্ছে এবং নতুন এক আমি বিভিন্ন বস্তু হিসেবে আপডেট এপিআই কল, disregarding কাছ থেকে যে .Equals()
।
এটি একটি সমস্যার কারণ কারণ যখন আমি এখন আপডেট মুভিটি দিয়ে ডেটাবেস আপডেট করার চেষ্টা করব তখন এটি বিদ্যমান মুভিটি আপডেট করার পরিবর্তে এটি সন্নিবেশ করবে।
ভাষাগুলির সাথে আমার আগে এই সমস্যাটি ছিল এবং আমার সমাধানটি ছিল সংযুক্ত ভাষার বিষয়গুলি অনুসন্ধান করা, প্রসঙ্গ থেকে এটিকে আলাদা করা, তাদের পিকে আপডেট হওয়া অবজেক্টে স্থানান্তরিত করা এবং প্রসঙ্গে সংযুক্তি দেওয়া। যখন SaveChanges()
এখন মৃত্যুদন্ড কার্যকর করা হবে, এটি মূলত এটি প্রতিস্থাপন করবে।
এটি একটি বরং দুর্গন্ধযুক্ত পদ্ধতির কারণ যদি আমি আমার Movie
অবজেক্টে এই পদ্ধতির ধারা অব্যাহত রাখি তবে এর অর্থ হ'ল আমাকে চলচ্চিত্র, ভাষা, ঘরানা এবং কীওয়ার্ডগুলি পৃথক করে রাখতে হবে, ডাটাবেসে প্রত্যেককে অনুসন্ধান করতে হবে, তাদের আইডি স্থানান্তর করতে হবে এবং সন্নিবেশ করানো হবে নতুন বস্তু
আরও কি মার্জিতভাবে এটি করার উপায় আছে? আদর্শভাবে আমি কেবল প্রসঙ্গে প্রযোজ্য মুভিটিতে যেতে চাই এবং Equals()
পদ্ধতির উপর ভিত্তি করে আপডেট করতে , তার সমস্ত ক্ষেত্র আপডেট করতে এবং প্রতিটি জটিল অবজেক্টের জন্য সঠিক মুভিটি নির্বাচন করতে চাই : তার নিজস্ব Equals()
পদ্ধতির ভিত্তিতে আবার বিদ্যমান রেকর্ডটি ব্যবহার করুন এবং যদি সন্নিবেশ করান তবে এটি এখনও নেই।
আমি .Update()
প্রতিটি জটিল বস্তুর উপর পদ্ধতি সরবরাহ করে বিচ্ছিন্নকরণ / সংযুক্তি এড়িয়ে যেতে পারি যা আমি সমস্ত সংযুক্ত বস্তু পুনরুদ্ধারের সংমিশ্রণে ব্যবহার করতে পারি তবে এটি আপডেট করার জন্য আমার এখনও বিদ্যমান প্রতিটি অবজেক্টটি পুনরুদ্ধার করতে হবে।
id
এবং বাহ্যিক এপিআইয়ের চলচ্চিত্রগুলি ফিল্ডটি ব্যবহার করে স্থানীয়দের সাথে মেলে tmdbid
। মুভি, ঘরানা, ভাষা, কীওয়ার্ড ইত্যাদির সম্পর্কে একটি কালে আপডেট হওয়া দরকার এমন সমস্ত সত্তা আমি পুনরুদ্ধার করতে পারছি না এইগুলির প্রত্যেকটিরই পিকে রয়েছে এবং এটি ডেটাবেসে ইতিমধ্যে বিদ্যমান থাকতে পারে।