একাধিক ডেটা কনটেক্সপ ক্লাস কি কখনও উপযুক্ত?

একটি ASP.net 3.5 অ্যাপ্লিকেশন মধ্যে LinqToSql সম্পূর্ণরূপে ব্যবহার করার জন্য, এটি ডেটা কনটেক্সট ক্লাস (যা সাধারণত ব্যবহার করা হয় ভিএস 2008 সালে ডিজাইনার)। UI দৃষ্টিকোণ থেকে, ডেটা কনটেক্সট আপনার ডাটাবেসের অংশগুলির একটি নকশা যা আপনি LinqToSql এর মাধ্যমে প্রকাশ করতে চান এবং LinqToSql এর ORM বৈশিষ্ট্যগুলি সেট করার অবিচ্ছেদ্য অংশ।

আমার প্রশ্ন হল: আমি এমন একটি প্রকল্প স্থাপন করছি যার একটি বড় ডাটাবেস ব্যবহার করে যেখানে বিদেশী কীগুলির মাধ্যমে কোনও টেবিলের সাথে মিল রয়েছে। আমার প্রথম ঝোঁক হল একটি বিশাল ডেটা কনটেক্সট বর্গ যা পুরো ডাটাবেস মডেল করে। এই পদ্ধতিতে আমি তত্ত্বগতভাবে (যদিও আমি জানি না এই অভ্যাসের প্রয়োজন হলে) বিদেশী কি সংযোগগুলি ব্যবহার করে LinqToSql এর মাধ্যমে উৎপন্ন করা হয় যাতে আমার কোডে সম্পর্কিত বস্তুর মধ্যে সহজেই যেতে হয়, সংশ্লিষ্ট বস্তুগুলি সন্নিবেশ করানো ইত্যাদি।

যাইহোক, এটি কিছু চিন্তা করার পর, এখন আমি মনে করি যে এটি একাধিক ডেটকন্টেক্স ক্লাস তৈরি করতে আরও বেশি জ্ঞাত হতে পারে, আমার ডেটাবেসের মধ্যে একটি নির্দিষ্ট নামস্থান বা লজিকাল ইন্টারঅ্যাকাল্ট বিভাগের সাথে সম্পর্কিত প্রত্যেকটি। আমার প্রধান উদ্বেগ হল যে ডেটাবেসের নির্দিষ্ট এলাকার সাথে সম্পর্কযুক্ত ব্যক্তিগত ক্রিয়াকলাপের জন্য একটি বিশাল ডেটা কনটেন্টেক্স ক্লাস চালু করা এবং তা নিষ্পত্তি করা, অ্যাপ্লিকেশনের রিসোর্সগুলির উপর অপ্রয়োজনীয় চাপ প্রয়োগ করা হবে। উপরন্তু, এটি একটি বড় এক থেকে ছোট ডেটা কনটেক্সট ফাইল তৈরি এবং পরিচালনা করা সহজ। আমি যে হারাম হব তা হল যে ডাটাবেসের কিছু দূরবর্তী অংশগুলি যা LinqToSql (যদিও সম্পর্কের একটি শৃঙ্খলা প্রকৃত ডাটাবেসে তাদের সংযুক্ত করে) মাধ্যমে নাওযেবল হবে না। উপরন্তু, কিছু টেবিলের ক্লাস থাকবে যা একাধিক ডেটা কনটেক্সটে বিদ্যমান থাকবে।

একাধিক ডেটা কনটেক্স্টস (DB namespaces এর সাথে সংশ্লিষ্ট) কোনটি (বা ছাড়াও) একটি খুব বড় ডেটা কনটেক্সট ক্লাস (পুরো ডিবি সংশ্লিষ্ট) এর উপযুক্ত কিনা তা কোন ধারণা বা অভিজ্ঞতা?

0

5 উত্তর

আমি একটি উত্তর দেবার জন্য ডিটেলের উপর বিপরীতমুখী ফিটিং LINQ থেকে এসকিউএল একই প্রশ্নের উপর wrangling করছি। আমাদের ডাটাবেস একটি whopper একটি বিট (150 সারণী) এবং কয়েক চিন্তা এবং পরীক্ষা আমি একাধিক DataContexts ব্যবহার করার জন্য নির্বাচিত পরে। এই একটি বিরোধী প্যাটার্ন হিসাবে বিবেচনা করা হয় কিনা দেখা হবে, কিন্তু এখন জন্য এটি জীবন পরিচালনাযোগ্য করে তোলে।

0
যোগ

আমি গৃহীত উত্তর দিয়ে অসম্মতি আছে। প্রশ্ন উত্থাপিত, সিস্টেমের প্রায় একাধিক টেবিলের মধ্যে দৃঢ় বিদেশী কী সম্পর্ক সঙ্গে একটি বড় ডাটাবেস আছে (এছাড়াও আমি যেখানে কাজ ক্ষেত্রে)। এই পরিস্থিতিতে, এটি ছোট ডেটা কনটেক্স্টস (ডিসি) এর মধ্যে ভঙ্গ করে দুটি অবিলম্বে এবং প্রধান দুর্ঘটনা (উভয় প্রশ্ন দ্বারা উল্লিখিত):

  1. You lose relationships between some tables. You can try to choose your DC boundaries wisely, but you will eventually run into a situation where it would be very convenient to use a relationship from a table in one DC to a table in another, and you won't be able to.
  2. Some tables may appear in multiple DC's. This means that if you want to add table-specific helper methods, business logic, or other code in partial classes, the types won't be compatible across DC's. You can work around this by inheriting each entity class from its own specific base class, which gets messy. Also, schema changes will have to be duplicated across multiple DC's.

এখন যারা উল্লেখযোগ্য অপূর্ণতা আছে। তাদের পরাজয়ের জন্য যথেষ্ট বড় সুবিধা আছে কি? প্রশ্ন কর্মক্ষমতা উল্লেখ:

আমার প্রধান উদ্বেগ হল যে এক বিশাল তাত্ক্ষণিক ও নিষ্পত্তি করা   ডেটা কনটেক্সট ক্লাস প্রত্যেক সময় সংশ্লিষ্ট বিভিন্ন অপারেশনগুলির জন্য   ডাটাবেসের নির্দিষ্ট এলাকায় একটি অপ্রয়োজনীয় আরোপ করা হবে   অ্যাপ্লিকেশনের রিসোর্সগুলির উপর আরোপ করা।

প্রকৃতপক্ষে, এটা সত্য নয় যে একটি বড় ডিসি কাজের একটি নির্দিষ্ট ইউনিট ইন ইনস্টিটিউট বা ব্যবহার করার জন্য উল্লেখযোগ্যভাবে আরো সময় নেয়। আসলে, চলমান প্রক্রিয়ার মধ্যে প্রথম দৃষ্টান্ত তৈরির পরে, একই ডিসি এর পরবর্তী অনুলিপি প্রায় তাত্ক্ষণিকভাবে তৈরি করা যেতে পারে

একাধিক ডিসি থেকে একমাত্র বাস্তব সুবিধা, একক, বৃহৎ ডাটাবেসের জন্য পুঙ্খানুপুঙ্খ বিদেশী কী সম্পর্কগুলি হল যে আপনি আপনার কোডকে আরও ভাল করে তুলতে পারেন। কিন্তু আপনি ইতিমধ্যে আংশিক ক্লাস দিয়ে এটি করতে পারেন।

এছাড়াও, কাজের ধারণাটি মূল মূল প্রশ্নের সাথে সম্পর্কিত নয়। কাজের ইউনিট সাধারণত একটি ডিসি উদাহরণ একটি ডিসি শ্রেণী শক্তিশালী> সক্ষম করছেন

0
যোগ

আমি মনে করি জন সঠিক।

"আমার প্রধান উদ্বেগ হচ্ছে, ডেটাবেজের নির্দিষ্ট এলাকার সাথে সম্পর্কযুক্ত ব্যক্তিগত ক্রিয়াকলাপের জন্য একটি বিশাল ডন্টাচন্টেক্স ক্লাসকে তাত্ক্ষণিক ও নিষ্পত্তি করা, অ্যাপ্লিকেশন রিসোর্সগুলিতে একটি অপ্রয়োজনীয় প্রযোজ্য প্রয়োগ করা হবে"

কিভাবে আপনি যে বিবৃতি সমর্থন? আপনার পরীক্ষাটি কি দেখায় যে একটি বৃহত ডেটা কনটেক্সটটি একটি কার্যকরী বোনাস? একাধিক ড্যাটাচনেটক্সগুলি হচ্ছে একাধিক ডেটাবেস থাকা মত অনেক এবং অনুরূপ পরিস্থিতিতে অনুভূতি তোলে, যে, কখনও কখনও কখনও। আপনি যদি একাধিক ড্যাটাচনেটক্সের সাথে কাজ করেন তবে আপনি যা ট্র্যাক রাখতে চান তা ট্র্যাক রাখতে হবে যা ডেটা টোনটেক্টেক্ট এবং আপনি এমন বস্তুর সাথে সম্পর্কিত করতে পারবেন না যা একই ডাটা প্রসঙ্গে নেই যে কোন বাস্তব সুবিধার জন্য একটি ব্যয়বহুল নকশা গন্ধ।

@ এভান "ডেটা কনটেক্সট (এনটিক্টস বা লিংক অবজেক্টস অবজেক্ট কনটেক্সট) একটি সংযোগের তুলনায়" কাজের ইউনিট " এটা ঠিক যে কেন আপনার একাধিক ডেটাচেনটেক্ট না থাকা উচিত। কেন এক যে "কাজের একটি ইউনিট" এক যে আরো চান?

0
যোগ
হ্যাঁ, ওপি এই অনুমান করে সঠিক হয় না যে বড় ডিসিটি তাত্ক্ষণিকভাবে আরো সময় নেয়। প্রকৃতপক্ষে, প্রথম উদাহরণটি চলমান প্রক্রিয়ার পরে তৈরি করা হয়, একই ডিসি এর পরবর্তী ঘটনা প্রায় তাত্ক্ষণিকভাবে তৈরি করা যায়।
যোগ লেখক Jordan Rieger, উৎস

আমি জন এর উত্তর সঙ্গে অসম্মতি। ডেটা কনটেক্সট (অথবা Linq- এগুলি ObjectContext) একটি সংযোগের তুলনায় "কাজের ইউনিট" এর বেশি। এটি ট্র্যাকিং ট্র্যাকিং পরিচালনা করে, ইত্যাদি একটি বর্ণনা জন্য এই ব্লগ পোস্ট দেখুন:

লাইফটাইম একটি LINQ থেকে SQL ডেটা কনটেইক্সে

এই ব্লগ পোস্টের চারটি প্রধান পয়েন্ট হল ডেটা কনটেক্সট:

  1. আদর্শভাবে উপযুক্ত "কাজের ইউনিট" পদ্ধতির জন্য
  2. এছাড়াও জন্য ডিজাইন করা হয় "স্টেটমেন্ট" সার্ভার অপারেশন
  3. জন্য ডিজাইন করা হয় না     দীর্ঘস্থায়ী ব্যবহার
  4.   পরে খুব সাবধানে ব্যবহার করা উচিত
    কোন SumbitChanges() অপারেশন।
    </কোড> 
    করুন

এটি বিবেচনা করে, আমি একাধিক ডেটা কনটেক্সট ব্যবহার করে কোনও ক্ষতি করতে চাইনা বলে মনে করি না- আসলে, বিভিন্ন ধরনের কাজের জন্য বিভিন্ন ডেটা কনটেক্স্টস তৈরি করা আপনার LinqToSql ছত্রাকরণকে আরো ব্যবহারযোগ্য এবং সংগঠিত করতে সাহায্য করবে। শুধুমাত্র downside আপনি আপনার dmbl স্বয়ংক্রিয় উত্পন্ন করতে sqlmetal ব্যবহার করতে সক্ষম হবে না।

0
যোগ

LINQ থেকে এসকিউএল এবং LINQ- র সাহায্যে আমার অভিজ্ঞতাগুলি একটি ডাটা কনটেক্সট ডাটাবেসের সাথে সংযোগের সমার্থক। তাই আপনি যদি একাধিক ডেটা স্টোরেস ব্যবহার করতে চান তবে আপনাকে একাধিক ডাটা কনটেক্সটস ব্যবহার করতে হবে। আমার অন্ত্র প্রতিক্রিয়া আপনি একটি DataContext সঙ্গে একটি ধীর ডাউন অনেক লক্ষ্য করা হবে না যে টেবিলের একটি বড় সংখ্যা encompasses আপনি যদি যাই তবে আপনি সবসময় পয়েন্ট টেবিল বিভাজক যেখানে আপনি সারণী অন্য টেবিলের সাথে কোন সম্পর্ক না এবং একাধিক প্রেক্ষাপট তৈরি করতে পারেন টেবিল বিচ্ছিন্ন করতে পারে।

0
যোগ