আপনি ডাটাঅনোটেশন দিয়ে যা কনফিগার করতে পারেন তার সবকিছুই ফ্লুয়েট এপিআই দ্বারা সম্ভব। বিপরীত সত্য নয়। সুতরাং, কনফিগারেশন বিকল্প এবং নমনীয়তার দৃষ্টিকোণ থেকে ফ্লুয়েন্ট এপিআই "আরও ভাল"।
কনফিগারেশন উদাহরণগুলি (নিশ্চিতভাবে সম্পূর্ণ তালিকা নয়) যা ফ্লুয়েট এপিআইতে সম্ভব তবে ডেটাঅনোটেশন (যতদূর আমি দেখতে পাচ্ছি) দ্বারা সম্ভব নয়:
ক্যাসকেডিং মুছে ফেলা বন্ধ করুন:
.WillCascadeOnDelete(false)
ডাটাবেসে বিদেশী কী কলামের নাম উল্লেখ করুন যখন কীটি আপনার অবজেক্ট মডেলে প্রকাশিত হবে না:
.Map(conf => conf.MapKey("MyForeignKeyID"))
সম্পর্কের সূক্ষ্ম দানাদার টিউনিং, বিশেষত সমস্ত ক্ষেত্রে যেখানে অ্যাসোসিয়েশনের কেবলমাত্র এক পক্ষ অবজেক্ট মডেলে প্রকাশিত হয়:
.WithMany(...)
, WithOptional(...)
, WithRequiredDependent(...)
,WithRequiredPrincipal(...)
অবজেক্ট মডেল এবং ডাটাবেস টেবিলের মধ্যে উত্তরাধিকার ম্যাপিংয়ের স্পেসিফিকেশন (টেবিল-প্রতি-স্তরক্রম, টেবিল-প্রতি-প্রকার, সারণী-প্রতি-কংক্রিট-শ্রেণি):
.Map<TDerived>(Action<EntityMappingConfiguration<TDerived>> ...)
সম্পাদনা: মাইক্রোসফ্ট ফ্লুয়েন্ট এপিআইকে একটি "উন্নত বৈশিষ্ট্য" হিসাবে বিবেচনা করে ( এখান থেকে উদ্ধৃতি ):
সাবলীল এপিআইকে আরও উন্নত বৈশিষ্ট্য হিসাবে বিবেচনা করা হয় এবং আপনার প্রয়োজনীয়তাগুলির জন্য আপনাকে সাবলীল এপিআই ব্যবহার করার প্রয়োজন না হলে আমরা ডেটা টীকাগুলি ব্যবহারের পরামর্শ দেব।
তবে আমার মতে আপনি খুব দ্রুত ডেটাঅনোটেশনগুলির সীমাবদ্ধতায় পৌঁছে গেছেন (সম্ভবত অত্যন্ত সাধারণ বস্তুর মডেলগুলি বাদে)। আপনি যদি ডেটাঅনোটেশন দিয়ে আপনার মডেল টিউন করতে না পারেন তবে আপনার শেষ অবলম্বনটি হ'ল ডিফল্ট ম্যাপিং কনভেনশনগুলি অনুসরণ করা (সেই নিয়ম অনুসারে আপনার সম্পত্তি নামকরণ করে)। বর্তমানে আপনি কনভেনশনগুলিকে ওভাররাইট করতে পারবেন না (কেবল তাদের অক্ষম করুন; এমএস ভবিষ্যতের EF রিলিজগুলিতে কনভেনশনগুলির জন্য কনফিগারেশন বিকল্প দেওয়ার ঘোষণা দিয়েছিল)। আপনি যদি নিজের অবজেক্টের মডেলটি সংজ্ঞায়িত করেন তবে আপনি যদি ম্যাপিং কনভেনশনগুলিতে বাধ্য হতে না চান তবে আপনার একমাত্র বিকল্প হ'ল ফ্লুয়েট এপিআই।
ফ্লুয়েন্ট এপিআই শিখাই প্রায় জরুরি imho, সহজ অ্যাপ্লিকেশনগুলির জন্য ডেটাঅ্যানোটেশনগুলি একটি সুন্দর are