আপডেট: আমি 4.0 সংস্করণ থেকে সত্তা ফ্রেমওয়ার্ক ব্যবহার করি নি, তাই আমার উত্তরটি পুরানো হতে পারে। আমি এখনও আমার প্রকল্পগুলিতে NH বা খাঁটি ADO .NET ব্যবহার করছি। এবং আমি 4.0 এর পর থেকে ইএফ-এ নতুন কী তাও দেখতে চাই না, কারণ এনএইচ পুরোপুরি কাজ করে।
আপনি উভয় ব্যবহার করার সময় আসলে তাদের তুলনা করা বেশ সহজ। EF4 এর সাথে কিছু গুরুতর সীমাবদ্ধতা রয়েছে, আমি নিজের নামে যেটির মুখোমুখি হয়েছি তার কয়েকটি নাম রাখতে পারি:
EF4 সমস্যা:
- উত্সাহটি লোডিং এবং ফলাফলকে আকার দেওয়ার জন্য : EF4 উত্সাহী লোডিং সিস্টেম (অন্তর্ভুক্ত ("পথ")) অযৌক্তিক এসকিউএল উত্পন্ন করে, লুপিং জোনের সাথে, যা হাজারে (আক্ষরিক নয়) কার্যকর করবে বহু-বহু-সম্পর্কের জন্য সময় ধীর করে তারপরে লিখেছেন এসকিউএল (এটি) কার্যকরভাবে অকেজো)।
- ম্যাটেরিয়ালাইজার যুক্ত সংস্থাগুলি বাস্তবায়িত করতে পারে না : আপনি যদি নিজেকে ভাবতে পারেন যে আপনার নিজের এসকিউএল কোয়েরি সরবরাহ করে আপনি আগের সমস্যাটি কাটিয়ে উঠতে পারেন তবে আপনি ভুল। EF4 যুক্ত এসকিউএল কোয়েরি সম্পর্কিত সংস্থাগুলি বাস্তবায়িত করতে (মানচিত্র) তৈরি করতে পারে না, এটি কেবলমাত্র একটি টেবিল থেকে ডেটা লোড করতে পারে (সুতরাং আপনার যদি অর্ডার থাকে r প্রডাক্ট থাকে, নির্বাচন করুন * বাম জয়েন্ট থেকে পণ্য কেবল অর্ডার অবজেক্টকে আরম্ভ করবে, পণ্যটি নਾਲ থেকে যাবে, ভেবেছিলাম এটি শুরু করার জন্য প্রয়োজনীয় সমস্ত ডেটা ক্যোয়ারিতে আনা হয়েছে)। এটি ইএফএক্সটেনশন সম্প্রদায় অ্যাড-অন ব্যবহার করে কাটিয়ে উঠতে পারে, তবে এর জন্য আপনাকে যে কোডটি লিখতে হবে তা সত্যিই কুৎসিত (আমি চেষ্টা করেছি)।
স্ব-ট্র্যাকিং সত্তা: অনেকেই বলে থাকেন যে স্ব-ট্র্যাকিং সত্তাগুলি এই থ্রেডের শীর্ষ উত্তর সহ এন-টিয়ার বিকাশের পক্ষে দুর্দান্ত। ভেবেছিলাম আমি তাদের চেষ্টা করেও দেখিনি, আমি বলতে পারি যে তারা নেই very প্রতিটি ইনপুট জাল করা যেতে পারে, আপনি কেবল যে ব্যবহারকারী আপনাকে প্রেরণ করেন তা পরিবর্তন করতে পারেন এবং সেগুলি ডেটা বেসে প্রয়োগ করতে পারেন না, কেন ব্যবহারকারীকে সরাসরি ডেটা দেবেন না তাহলে বেস অ্যাক্সেস? আপনাকে যে কোনও উপায়ে ডেটা ব্যবহারকারীকে লোড করতে হবে তা ডিবি থেকে পরিবর্তন করতে চলেছে, এটি উপস্থিত রয়েছে তা যাচাই করুন exists উপস্থিত নেই অনুমতি যাচাই করেন না ইত্যাদি ইত্যাদি। আপনি ব্যবহারকারীকে সে সার্ভারে যে সত্তা প্রেরণ করছে সেটির অবস্থাতে বিশ্বাস করতে পারবেন না, আপনি যাইহোক ডিবি থেকে এই সত্তাটি লোড করতে হবে এবং এর স্থিতি এবং অন্যান্য জিনিসগুলি নির্ধারণ করতে হবে, সুতরাং স্বতঃ-ট্র্যাকিং সত্তাগুলি যেমন এই অভ্যন্তরীণ ব্যবহারের জন্য কোনও ব্যক্তিগত বিশ্বাসযোগ্য এন-টায়ার সিস্টেম না করে, এই তথ্যটি অকেজো, এমন ক্ষেত্রে সম্ভবত আপনি কেবল সরল দিতে পারবেন ডিবি অ্যাক্সেস।
লগিং, ইভেন্টগুলি, ব্যবসায়ের যুক্তি সংহত করে: EF4 ব্ল্যাক বক্সের মতো, এটি কিছু করে এবং এটি কী করে আপনার কোনও ধারণা নেই। কেবলমাত্র একটি ইভেন্ট অনস্যাভিংচেঞ্জস রয়েছে যেখানে আপনি কিছু ব্যবসায়িক যুক্তি রাখতে পারেন ডিবি দিয়ে কিছু হওয়ার আগে আপনাকে চালনার দরকার হয়, এবং কিছু ঘটার আগে যদি আপনাকে ব্যবসায়িক সামগ্রীতে কিছু পরিবর্তন প্রয়োগ করতে হয় তবে আপনাকে অবজেক্টস্টেটম্যানেজারে খনন করতে হবে, এবং এটি সত্যিই কুৎসিত is , কোড বিশাল হতে পারে। যদি আপনি উদাহরণস্বরূপ সংগ্রহস্থল প্যাটার্ন ব্যবহার করে থাকেন এবং ক্লিন অবজেক্টের উপায়ে ডিবিতে পরিবর্তনগুলি সম্পর্কে কী অবহিত করা হয় তবে আপনাকে EF এর সাহায্যে কঠিন সময় কাটাতে হবে।
এক্সটেনসিবিলিটি: সমস্ত EF কোডটি ব্যক্তিগত এবং অভ্যন্তরীণ, যদি আপনি কিছু পছন্দ না করেন (এবং আপনি EF ব্যবহারের বিষয়ে গুরুতর হন তবে আপনি অনেকগুলি পছন্দ করবেন না), কোনওভাবেই আপনি এটিকে সহজ উপায়ে পরিবর্তন করতে পারবেন না, বাস্তবে আমি নিশ্চিত স্ক্র্যাচ থেকে আপনার নিজের মালিকানা লিখাই সহজ (আমি করেছি) তারপরে আপনার প্রয়োজন মতো EF কাজ করুন। উদাহরণস্বরূপ ইএফএক্সটেনশনের উত্সটি দেখুন, এটি এক্সটেনশন পদ্ধতি এবং ইএফকে আরও ব্যবহারযোগ্য করে তোলার জন্য বিভিন্ন "হ্যাক" এর উপর ভিত্তি করে এবং কোডটি বেশ কুরুচিপূর্ণ (এবং এটি লেখকদের ত্রুটি নয়, যখন ইএফ-এর সমস্ত কিছু ব্যক্তিগত হয় তবে এটি কেবল একমাত্র এটি প্রসারিত করার উপায়)।
আমি EF সম্পর্কে খারাপ জিনিস লেখা চালিয়ে যেতে পারি এবং 20 পৃষ্ঠাগুলির মতো এটির সাথে কাজ করা আমার পক্ষে কতটা বেদনাদায়ক ছিল এবং সম্ভবত আমি তা করব।
এনহাইবারনেট সম্পর্কে কী? এটি একেবারে ভিন্ন স্তর, এটি পিএইচপি সি এর সাথে তুলনা করার মতো, ইএফ 4 স্টোন-এজের মতো, এটি 10 বছরের পিছনে EF এর মতো, উন্নয়নের অগ্রগতিতে NHibernate এবং বাস্তবে এটি হায়বারনেট 2001 সালে শুরু হয়েছিল If যদি আপনার অবসর সময় থাকে শিখতে এবং নিবারনেট চালু করতে, এটি করুন।