কোড-প্রথম বনাম মডেল / ডাটাবেস-প্রথম [বন্ধ]


618

ইডিএমএক্স ডায়াগ্রামের সাথে সত্তা ফ্রেমওয়ার্ক ৪.১ কোড-ফার্স্ট ওভার মডেল / ডেটাবেস-প্রথম ব্যবহারের পক্ষে কী কী?

আমি EF 4.1 ব্যবহার করে ডেটা অ্যাক্সেস স্তর তৈরির সমস্ত পন্থা সম্পূর্ণরূপে বোঝার চেষ্টা করছি। আমি সংগ্রহস্থল প্যাটার্ন এবং ব্যবহার করছি IoC

আমি জানি আমি কোড-প্রথম পদ্ধতির ব্যবহার করতে পারি: আমার সত্ত্বা এবং প্রসঙ্গটি হাত দ্বারা সংজ্ঞায়িত করুন এবং ModelBuilderস্কিমাটি সূক্ষ্ম-টিউন করতে ব্যবহার করুন ।

আমি একটি EDMXচিত্রও তৈরি করতে পারি এবং একটি কোড উত্পন্ন পদক্ষেপ চয়ন করতে পারি যা একই POCOশ্রেণিগুলি তৈরি করতে টি 4 টেমপ্লেট ব্যবহার করে ।

উভয় ক্ষেত্রেই আমি অবজেক্টস্টিক এবং প্রসঙ্গটি থেকে উদ্ভূত POCOঅবজেক্টের সাথে শেষ করি ।ORMDbContext

ডেটাবেস-প্রথমটি সবচেয়ে আকর্ষণীয় বলে মনে হচ্ছে যেহেতু আমি এন্টারপ্রাইজ ম্যানেজারে ডেটাবেস ডিজাইন করতে পারি, দ্রুত মডেলটি সিঙ্ক করতে পারি এবং ডিজাইনার ব্যবহার করে এটি সূক্ষ্ম-টিউন করি।

তাহলে এই দুটি পদ্ধতির মধ্যে পার্থক্য কী? এটি কি কেবল VS2010 বনাম এন্টারপ্রাইজ ম্যানেজারের পছন্দ সম্পর্কে?


12
সত্তা ফ্রেমওয়ার্ক 7 EDMX ছাড়ছে
সিএডি ব্লক

5
@ ক্যাডব্লোক সত্তা ফ্রেমওয়ার্ক 7 এখন সত্ত্বা ফ্রেমওয়ার্ক কোর 1.0
আরবিটি

6
অন্য যে কোনও ব্রাউজারের কাছে, আপনার যদি উপরে বর্ণিত 7000 দীর্ঘ এক্সএমএল ফাইলগুলির জন্য হার্ডোন না থাকে এবং একত্রীকরণের বিরোধগুলি সমাধান না করে, প্রথমে কোডে যান এবং নিজেকে একটি মাথা ব্যথা বাঁচান
ড্যান প্যান্ট্রি


4
প্রদত্ত প্রতিটি উত্তর সম্পর্কে হ'ল "আমি মনে করি" ... "প্রাথমিক মতামত ভিত্তিক" এর নিখুঁত সংজ্ঞা।
লঙ্কায়মার্ট

উত্তর:


703

আমি মনে করি পার্থক্যগুলি হ'ল:

কোড আগে

  • খুব জনপ্রিয় কারণ হার্ডকোর প্রোগ্রামাররা কোনও ধরণের ডিজাইনার পছন্দ করেন না এবং ইডিএমএক্স এক্সএমএলে ম্যাপিং সংজ্ঞায়িত করা খুব জটিল।
  • কোডের উপর সম্পূর্ণ নিয়ন্ত্রণ (কোনও স্বয়ংক্রিয় জেনারেটেড কোড যা সংশোধন করা শক্ত নয়)।
  • সাধারণ প্রত্যাশা হ'ল আপনি ডিবি নিয়ে বিরক্ত করবেন না। ডিবি হ'ল একটি স্টোরেজ যা কোনও যুক্তি ছাড়াই। EF সৃষ্টি পরিচালনা করবে এবং আপনি কীভাবে এটি কাজ করে তা জানতে চান না।
  • আপনার কোড ডেটাবেস সংজ্ঞায়িত করায় সম্ভবত ডাটাবেসে ম্যানুয়াল পরিবর্তনগুলি সম্ভবত হারিয়ে যাবে।

প্রথমে ডাটাবেস

  • আপনার কাছে ডিবিএ ডিজাইন করেছেন, আলাদাভাবে বিকাশ করা হয়েছে বা যদি আপনার বিদ্যমান ডিবি রয়েছে তবে খুব জনপ্রিয়।
  • আপনি EF কে আপনার জন্য সত্তা তৈরি করতে দেবেন এবং ম্যাপিংয়ের পরিবর্তনের পরে আপনি POCO সত্তা তৈরি করবেন।
  • আপনি যদি পোকো সত্তাগুলিতে অতিরিক্ত বৈশিষ্ট্য চান তবে আপনাকে অবশ্যই T4 টেম্পলেটটি সংশোধন করতে হবে বা আংশিক ক্লাস ব্যবহার করতে হবে।
  • ডাটাবেসটিতে ম্যানুয়াল পরিবর্তনগুলি সম্ভব কারণ ডেটাবেস আপনার ডোমেন মডেলটি সংজ্ঞায়িত করে। আপনি সর্বদা ডাটাবেস থেকে মডেল আপডেট করতে পারেন (এই বৈশিষ্ট্যটি বেশ ভালভাবে কাজ করে)।
  • আমি প্রায়শই এটি একসাথে ভিএস ডেটাবেস প্রকল্পগুলি ব্যবহার করি (কেবলমাত্র প্রিমিয়াম এবং আলটিমেট সংস্করণ)।

মডেল প্রথম

  • আইএমএইচও জনপ্রিয় যদি আপনি ডিজাইনার অনুরাগী হন (= আপনি কোডিং কোড বা এসকিউএল পছন্দ করেন না)।
  • আপনি আপনার মডেলটি "আঁকুন" এবং ওয়ার্কফ্লো আপনার ডেটাবেস স্ক্রিপ্ট এবং টি 4 টেমপ্লেটটি আপনার পোকো সত্তা তৈরি করতে দেবেন। আপনি আপনার সত্তা এবং ডাটাবেস উভয়ের নিয়ন্ত্রণের কিছুটা হারাবেন তবে ছোট সহজ প্রকল্পগুলির জন্য আপনি খুব উত্পাদনশীল হবেন।
  • আপনি যদি পোকো সত্তাগুলিতে অতিরিক্ত বৈশিষ্ট্য চান তবে আপনাকে অবশ্যই T4 টেম্পলেটটি সংশোধন করতে হবে বা আংশিক ক্লাস ব্যবহার করতে হবে।
  • আপনার মডেল ডাটাবেসটি সংজ্ঞায়িত করায় সম্ভবত ডাটাবেসে ম্যানুয়াল পরিবর্তনগুলি সম্ভবত হারিয়ে যাবে। আপনার যদি ডেটাবেস জেনারেশন পাওয়ার প্যাক ইনস্টল থাকে তবে এটি আরও ভাল কাজ করে। এটি আপনাকে ডাটাবেস স্কিমা আপডেট করতে (পুনরায় তৈরি করার পরিবর্তে) বা ভিএস-তে ডাটাবেস প্রকল্পগুলি আপডেট করার অনুমতি দেবে

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


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

152
আমি এত দিন ধরে ডাটাবেসগুলি ডিজাইন করে আসছি বলে মনে হয় না যে আমি প্রথমে ডাটাবেস ব্যতীত আর কিছু করবো। আসলে, আমি এখনও আরও উচ্চ ভলিউম নির্বাচন স্টেটমেন্ট এবং এর জন্য প্রচুর সঞ্চিত পদ্ধতি লিখি এবং তারপরে আমি পারফরম্যান্সের নামে EF মডেলটিতে একটি ফাংশন আমদানি করব।
স্টিভ ওয়ারথাম

9
উচ্চ পরিমাণের নির্বাচনী বিবৃতি বলতে কী বোঝ? সঞ্চিত পদ্ধতিগুলি দ্রুত হয় না তারপরে SELECT গুলি অ্যাপ্লিকেশন থেকে প্রেরণ করে।
পাইওটর পেরাক

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

5
@ জাকুবকোনকি, আপনি যা ব্যবহার করতে পারেন তা কেবল ব্যবহারের মধ্যেই DbContextনেই । ObjectContext((IObjectContextAdapter)dbcontext).ObjectContext
শিমি ওয়েটজ্যান্ডলার 12'12

134

আমি মনে করি "প্রোগ্রামিং সত্তা ফ্রেমওয়ার্ক" এর লেখক জুলি লারম্যানের এই সাধারণ "সিদ্ধান্ত গাছ" এর আরও বেশি আত্মবিশ্বাসের সাথে সিদ্ধান্ত নিতে সহায়তা করা উচিত:

EF- এর সাথে বিভিন্ন পন্থা বেছে নিতে সহায়তা করার জন্য একটি সিদ্ধান্ত গাছ

আরও তথ্য এখানে


111
এটি সম্পূর্ণ নয়। আপনি যদি ভিজ্যুয়াল ডিজাইনার ব্যবহার না করা পছন্দ করেন তবে আপনার কাছে একটি বিদ্যমান ডাটাবেস আছে?
ডেভ নিউ

14
আরও খারাপ ... বাস্তব জীবনের সিদ্ধান্তগুলি কোড-ফার্স্ট ব্যবহার করার সময় আপনি যে প্রযুক্তিগত সীমাবদ্ধতার মুখোমুখি হয়ে থাকেন সেগুলি ডায়াগ্রাম দ্বারা করা হয় না, উদাহরণস্বরূপ আপনি কোনও ক্ষেত্রে অনন্য সূচক তৈরি করতে পারবেন না বা গাছের টেবিলে আপনি শ্রেণিবদ্ধ তথ্য মুছে ফেলতে পারবেন না এটির জন্য প্রসঙ্গটি ব্যবহার করে একটি সিটিই দরকার T টেবিল.সক্লু কিউয়ারি ("নির্বাচন করুন ...")। মডেল / ডাটাবেস প্রথমে এই ত্রুটিগুলি নেই।
এলিজাবেথ

32
@ দাদনেউজা এটিই প্রথম পথ নয়?
ক্রিস এস

3
@ ডেভেনওয়াজা বিদ্যমান ডাটাবেস => বিদ্যমান ক্লাস? কোড প্রথম: ডাটাবেস প্রথম :)
রিয়াদ গোমরি

4
@ ডেভেনওয়াজা ডিবি থেকে আপনার পোকো ক্লাস তৈরি করতে সত্তা ফ্রেমওয়ার্ক পাওয়ারটুলগুলি ব্যবহার করুন। একটি বিদ্যমান ডাটাবেসের কোড প্রথম
ইমান মাহমুদিনাসাব

50

ডেটাবেস প্রথম এবং মডেল প্রথম কোন বাস্তব পার্থক্য আছে। উত্পন্ন কোডগুলি একই এবং আপনি এই পদ্ধতির সমন্বয় করতে পারেন। উদাহরণস্বরূপ, আপনি স্কয়ার স্ক্রিপ্ট ব্যবহার করে ডেটাবেস পরিবর্তন করতে এবং আপনার মডেল আপডেট করতে ডিজাইনার ব্যবহার করে ডাটাবেস তৈরি করতে পারেন।

আপনি যখন কোডটি প্রথম ব্যবহার করেন আপনি বিনোদনের ডেটাবেস এবং সমস্ত ডেটা না হারিয়ে মডেল পরিবর্তন করতে পারবেন না। আইএমএইচও, এই সীমাবদ্ধতাটি অত্যন্ত কঠোর এবং উত্পাদনে প্রথমে কোড ব্যবহার করার অনুমতি দেয় না। আপাতত এটি সত্যই ব্যবহারযোগ্য নয়।

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

প্রথমে কোডের সুবিধাটি খুব পরিষ্কার এবং সাধারণ কোড। আপনার এই কোডটির সম্পূর্ণ নিয়ন্ত্রণ রয়েছে এবং এটি আপনার ভিউ মডেল হিসাবে সহজেই সংশোধন করতে এবং ব্যবহার করতে পারেন।

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


7
আপনি যদি এসকিউএল স্ক্রিপ্টগুলির সাহায্যে উত্পাদন পরিবেশকে ম্যানুয়ালি আপডেট করতে যাচ্ছেন তবে আপনি কোড ফার্স্ট দিয়ে এখনও একই কাজ করতে পারেন। আপনি কেবল প্রয়োজন হিসাবে পরিবর্তন স্ক্রিপ্টগুলি উত্পন্ন করুন। বেশ কয়েকটি সরঞ্জাম এই ডেল্টাগুলিকে স্বয়ংক্রিয় করতে পারে এবং আপনি কোড ফার্স্ট ব্যবহার চালিয়ে যেতে পারেন। আপনার কেবলমাত্র কোড ফার্স্ট ইনিশিয়ালাইজারটি তৈরি করতে হবে যেমন তৈরি ডেটাবেসআইফনোটএক্সিস্টের মতো কিছু যাতে বর্তমান ডাটাবেসটি মুছতে না পারে।
এস্তেবান ব্রেনস

কিছু পার্থক্য ভিউগুলি আমদানি করে তারপর ডেটাবেসটিকে পুনরায় জেনারেট করে যেখানে ভিউগুলি টেবিল হয়ে যায়। একটি নতুন ডিবি তৈরি করা শক্ত করে তোলে এবং সিঙ্কে আছে কিনা তা দেখার জন্য প্রোড ডিবির সাথে তুলনা করুন।
ডেভ

মডেল ফার্স্ট ব্যবহারকারী-সংজ্ঞায়িত এসকিউএল ফাংশনগুলিকে সমর্থন করে না (কমপক্ষে EF4 এ, এটি পরিবর্তন হয়েছে কিনা তা জানেন না)। ডেটাবেস প্রথম দিয়ে, আপনি ইউডিএফগুলি আমদানি করতে পারেন এবং সেগুলি আপনার লিনকুই কোয়েরিতে ব্যবহার করতে পারেন।
সোশি আশের

কোনও পার্থক্য নেই? ভিউ এবং সিম্পল মেম্বারশিপ সারণীগুলি আমদানির চেষ্টা করুন এবং তারপরে মডেল থেকে ডেটাবেস তৈরি করুন এবং কী পান তা দেখুন। কাছেও নয়! এগুলি রাউন্ড ট্রিপ করা উচিত তবে এমএসএফটি মূলত সিএফের পরিবর্তে এমএফ এবং ডিএফকে ত্যাগ করেছে যা ভিউ এবং সঞ্চিত প্রকো ব্যবহারের ক্ষেত্রেও অসম্পূর্ণ।
ডেভ

আপনি কোডটি প্রথম মাইগ্রেশন ভিত্তিক ডাটাবেস বিনোদন প্রক্রিয়াটি অক্ষম করতে পারেন এবং এটি মডেল এবং ডাটাবেসে ম্যানুয়ালি করতে পারেন। <EntityFramework> ..... <contexts> <প্রসঙ্গ টাইপ = "myNamespace.mydbContext", "মায়াস্যাসঅপোরেশন" অক্ষম ডেটাবেসআইনিটিয়ালাইজেশন = "সত্য" /> এ আপনার ওয়েব / অ্যাপ.config এ অক্ষম ডাটাবেসআইনিটাইজেশন = "সত্য" নির্দিষ্ট করে আপনি এটি করতে পারেন </EntityFramework> আপনি মাইগ্রেশন ফোল্ডারটি মুছতে পারেন।
হাসতেখ

37

Http://www.itworld.com/development/405005/3-reason-use-code-first-design-entity-framework থেকে সম্পর্কিত অংশগুলি উদ্ধৃত করা হচ্ছে

সত্তা ফ্রেমওয়ার্ক সহ কোড প্রথম ডিজাইন ব্যবহারের 3 টি কারণ

1) কম ক্রাফ্ট, কম ফোলা

একটি .edmx মডেল ফাইল উত্পন্ন করার জন্য একটি বিদ্যমান ডাটাবেস ব্যবহার করে এবং সম্পর্কিত কোড মডেলগুলি স্বয়ংক্রিয়ভাবে উত্পন্ন কোডের একটি বিশাল গাদা তৈরি করে। এই উত্পন্ন ফাইলগুলিকে কখনও স্পর্শ না করার জন্য আপনি প্ররোচিত হবেন যাতে আপনি কিছু না ভাঙ্গেন বা আপনার পরিবর্তনগুলি পরবর্তী প্রজন্মের উপরে ওভাররাইট হয়ে যায়। প্রসঙ্গ এবং আরম্ভকারী এছাড়াও এই জগাখিচুড়ি একসাথে জ্যাম হয়। যখন আপনার উত্পন্ন মডেলগুলিতে কার্যকারিতা যুক্ত করতে হবে, যেমন গণনাযোগ্য পঠনযোগ্য সম্পত্তি হিসাবে, আপনাকে মডেল শ্রেণি প্রসারিত করতে হবে। এটি প্রায় প্রতিটি মডেলের জন্য প্রয়োজনীয়তা হিসাবে শেষ হয় এবং আপনি সমস্ত কিছুর জন্য একটি এক্সটেনশন দিয়ে শেষ করেন।

কোড সহ প্রথমে আপনার হাতের কোডেড মডেলগুলি আপনার ডাটাবেসে পরিণত হয়। আপনি যে সঠিক ফাইলগুলি তৈরি করছেন তা হ'ল এটি ডেটাবেস ডিজাইন তৈরি করে। কোনও অতিরিক্ত ফাইল নেই এবং যখন আপনি বৈশিষ্ট্য যুক্ত করতে চান বা ডেটাবেস সম্পর্কে জানার দরকার নেই এমন অন্য কোনও শ্রেণিবদ্ধ এক্সটেনশন তৈরি করার দরকার নেই। আপনি যথাযথ বাক্য গঠন অনুসরণ করে কেবল সেগুলি একই শ্রেণিতে যুক্ত করতে পারেন। হেক, আপনি যদি চান তবে আপনার কোডটি ভিজ্যুয়ালাইজ করতে একটি মডেল.এডএমএক্স ফাইল তৈরি করতে পারেন।

2) বৃহত্তর নিয়ন্ত্রণ

আপনি যখন প্রথমে ডিবি যান, আপনি আপনার অ্যাপ্লিকেশনটিতে ব্যবহারের জন্য আপনার মডেলগুলির জন্য যা তৈরি হয় তার করুণায় থাকবেন। কখনও কখনও নামকরণের সম্মেলনটি অনাকাঙ্ক্ষিত। কখনও কখনও সম্পর্ক এবং সমিতিগুলি আপনি যা চান তা তেমন হয় না। আপনার API প্রতিক্রিয়াগুলিতে অলস লোডিংয়ের ধ্বংসের সংঘাতের সাথে অন্য সময়ে অস্থায়ী সম্পর্ক।

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

3) ডাটাবেস সংস্করণ নিয়ন্ত্রণ

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

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


31

কোড-প্রথমটি উঠতি তারকা হিসাবে উপস্থিত হয়। আমি রুবেল অন রেলগুলি সম্পর্কে তাত্ক্ষণিকভাবে দেখেছিলাম এবং তাদের স্ট্যান্ডার্ডটি ডাটাবেস স্থানান্তরের সাথে কোড-ফার্স্ট।

আপনি যদি এমভিসি 3 অ্যাপ্লিকেশন তৈরি করে থাকেন তবে আমি বিশ্বাস করি কোডের প্রথমে নিম্নলিখিত সুবিধা রয়েছে:

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

হালনাগাদ

প্রশ্নটি EDMX মডেল / ডিবি-ফার্স্টের সাথে কোড-ফার্স্টের তুলনা করার জন্যও জিজ্ঞাসা করে। কোড-ফার্স্ট এই উভয় পদ্ধতির জন্যও ব্যবহার করা যেতে পারে:


3
মডেল-ফার্স্ট প্রথম পোকোকে কোডিং দিচ্ছে না, এটি কোড ফার্স্ট, পোকো স্বয়ংক্রিয়ভাবে উত্পন্ন করার জন্য মডেল-ফার্স্ট একটি ভিজ্যুয়াল ডিজাইনার এবং এর পরে মডেল থেকে ডাটাবেস উত্পন্ন করে।
দিয়েগো মেন্ডেস

আজকাল ভিজ্যুয়াল এবং কোড উভয় পথেই আপনি প্রথমে "মডেল" বা "ডাটাবেস" প্রথমে করতে পারেন। প্রথমটি হ'ল ম্যানুয়াল ডিজাইন (হয় কোড বা ভিজ্যুয়াল এডিটরের মাধ্যমে), দ্বিতীয়টি একটি ডাটাবেস তৈরি করছে এবং মডেল তৈরি করছে (হয় পোকো বা ইডিএমএক্স)।
টড

11

আমি ডেটাবেস কনফিগারেশনের উপর আরও নমনীয়তা এবং নিয়ন্ত্রণ সরবরাহ করতে প্রথমে EF ডাটাবেস ব্যবহার করি।

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

আমি দেখতে পাই ডিবি-র সময় উত্পন্ন ডিফল্ট পোকো ক্লাসগুলি খুব পরিষ্কার, তবে খুব দরকারী ডেটা টিকা বিশিষ্টতা বা সঞ্চিত পদ্ধতিতে ম্যাপিংয়ের অভাব রয়েছে। এর মধ্যে কিছু সীমাবদ্ধতা কাটিয়ে উঠতে আমি টি 4 টেমপ্লেট ব্যবহার করেছি। T4 টেমপ্লেটগুলি দুর্দান্ত, বিশেষত আপনার নিজের মেটাডেটা এবং আংশিক শ্রেণীর সাথে মিলিত হলে।

মডেলটিকে প্রথমে প্রচুর সম্ভাবনা রয়েছে বলে মনে হয় তবে জটিল ডাটাবেস স্কিমা রিফ্যাক্টরিংয়ের সময় আমাকে প্রচুর বাগ দিচ্ছে। নিশ্চিত কেন।


4
আপনি কোডটি ব্যবহার করে প্রথমে সংমিশ্রিত কীগুলি সংজ্ঞায়িত করতে পারেন - stackoverflow.com/questions/5466374/…
Jakub Konecki

3
ভবিষ্যতের পাঠকদের জন্য এটি আর হয় না, আপনি ইএফ কোড ফার্স্টে সূচি, মাল্টি-কলাম প্রাথমিক কী এবং এই জাতীয় জিনিস যুক্ত করতে পারেন।
tobiak777

1
EF ঠিক করা উচিত ছিল যাতে সমস্ত 3 টি পদ্ধতির জন্য সুবিধা এবং অসুবিধাগুলি হওয়ায় একই 3 ডেটাবেজে সমস্ত 3 পন্থাগুলি আন্তঃব্যবহারযোগ্যভাবে ব্যবহার করা যেতে পারে
ডেভ

ভবিষ্যতে অন্য আইডিই / ভাষায় স্থানান্তরিত হওয়ার কারণে আমি প্রথমে ডাটাবেস ব্যবহার করছি না বলে আদর্শ কোডের প্রথম সমাধানটির সত্যতা নেই এবং আমি দৃ solid় এবং সংহত ডাটাবেস কাঠামো রাখতে চাই, অন্য একটি বিষয় যা আমি প্রথমে ডাটাবেস পছন্দ করি তার কোনও অংশ পরিবর্তনের ক্ষেত্রে নমনীয়তা তথ্য ভান্ডার.
কিউমাস্টার

7

এসপি 1 এর আগে বড় মডেলের সাথে কাজ করা খুব ধীর ছিল, (এসপি 1 এর পরে এটি চেষ্টা করে দেখেনি, তবে বলা হয় এটি এখন একটি স্ন্যাপ)।

আমি এখনও আমার টেবিলগুলি প্রথমে ডিজাইন করি, তারপরে একটি অন্তর্নির্মিত সরঞ্জাম আমার জন্য পোকো উত্পন্ন করে, তাই এটি প্রতিটি পোকো অবজেক্টের জন্য পুনরাবৃত্তিমূলক কাজগুলি করার ভার নেয়।

আপনি যখন সোর্স কন্ট্রোল সিস্টেম ব্যবহার করছেন, আপনি সহজেই আপনার পোকোর ইতিহাস অনুসরণ করতে পারেন, ডিজাইনার উত্পন্ন কোড সহ এটি এত সহজ নয়।

আমার পোকোর জন্য আমার একটি বেস রয়েছে, যা অনেক কিছু সহজ করে তোলে।

আমার সমস্ত টেবিলের জন্য আমার মতামত রয়েছে, প্রতিটি বেস ভিউটি আমার বিদেশী কীগুলির জন্য প্রাথমিক তথ্য নিয়ে আসে এবং আমার পোকোগুলি আমার পোকো ক্লাস থেকে প্রাপ্ত, যা আবার বেশ দরকারী।

এবং অবশেষে আমি ডিজাইনারদের পছন্দ করি না।


8
'আপনি যখন সোর্স কন্ট্রোল সিস্টেমগুলি ব্যবহার করছেন, আপনি সহজেই আপনার পোকোর ইতিহাস অনুসরণ করতে পারেন, ডিজাইনার উত্পন্ন কোড সহ এটি এত সহজ নয়' ' - আমি উত্স নিয়ন্ত্রণে ডিজাইনার উত্পন্ন কোড রাখি, তাই আমি সর্বদা ইতিহাস দেখতে পারি।
জাকুব কোনেক্কি

1
@ জাকুবকোনকি আপনি কি কখনও 3+ জনের দলে ইডিএমএক্স ফাইলগুলি মেরে ফেলার চেষ্টা করেছেন? এটি কেবল একটি ব্যথা ... পরিবর্তে লোকেরা মার্জ করা এড়াতে চেষ্টা করে এবং কেবলমাত্র অন্যান্য সংশোধনী গ্রহণ করে এবং নিজস্ব পরিবর্তনগুলি পুনরাবৃত্তি করে because
bytecode77

6

ডাটাবেস প্রথম পদ্ধতির উদাহরণ:

কোনও কোড না লিখে: এএসপি.নেট এমভিসি / এমভিসি 3 ডাটাবেস প্রথম পদ্ধতির / ডেটাবেস প্রথমে

এবং আমি মনে করি এটি অন্যান্য পদ্ধতির চেয়ে ভাল কারণ এই পদ্ধতির সাথে ডেটা ক্ষতি কম is


আপনি কি ডিবি প্রথম পদ্ধতির সাথে 'কম ডেটা হ্রাস' হচ্ছে তা বিশদভাবে বলতে পারেন? আপনি যদি বিদ্যমান টেবিলকে দুটি ভাগে ভাগ করতে চান তবে আপনি কীভাবে ডেটা ট্রান্সফরমেশনটি সম্পাদন করবেন?
জাকুব কোনেক্কি

আপনি সম্ভবত একটি স্কিল স্ক্রিপ্ট লিখতে হবে যা রূপান্তরের বিষয়ে যত্ন নেয়। সাধারণত, এমএস তাদের নতুন সংস্করণ সহ কোড ফার্স্ট ডেটা মাইগ্রেশন উন্নত করার ঘোষণা দিয়েছিল, তাই এটি ভবিষ্যতে কোনও যুক্তি হতে পারে না।
ckonig

ডাটাবেস ডিজাইনে প্রথম সমস্যাটি হ'ল ডেটাবেস ডিজাইনে সাধারণত ত্রুটিযুক্ত বিমূর্ততা থাকে যা আপনার মডেল ... জংশন সারণী ইত্যাদিতে ফাঁস হয় the
Nerdfest

এই "উত্তর" হ'ল একটি মতামত যা আপনার যুক্তিতে কোনও মাংসের সাথে ভিত্তি করে নয়, একটি বাক্যই স্ট্যান্ড করে না।
ট্র্যাভিসো

আপনি কি ডিবি প্রথম পদ্ধতির সাথে 'কম ডেটা হ্রাস' হচ্ছে তা বিশদভাবে বলতে পারেন?
amal50

4

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

সুতরাং আমি যতটা সম্ভব সমস্ত সম্ভাব্য প্রকরণের কোড, প্রথম, মডেল ফার্স্ট, ডেটাবেস প্রথমে একমত, আপনাকে অবশ্যই প্রকৃত উত্পাদন পরিবেশ বিবেচনা করতে হবে। সুতরাং যদি আপনার সিস্টেমটি অনেক ব্যবহারকারী এবং ডিবিএর শোটি চালানোর সাথে একটি বৃহত ব্যবহারকারীর বেস অ্যাপ্লিকেশন হতে চলেছে তবে আপনি সম্ভবত আমার মতে ডেটাবেস প্রথম বিকল্পটি বিবেচনা করতে পারেন।


তুমি ঠিক. এমএস প্রোগ্রামারদের ভিন্ন ভিন্ন দৃষ্টিভঙ্গি দিয়েছে কারণ পুনরায় ভিন্ন পরিস্থিতিতে। আপনার সমস্ত কিছু জানা উচিত এবং আপনার দৃশ্যের ভিত্তিতে সিদ্ধান্ত নেওয়া উচিত যে প্রকল্পের জন্য সবচেয়ে ভাল কী এবং তারপরে আপনি কী সবচেয়ে বেশি পছন্দ করেন।
স্টার্লিং ডিয়াজ

0

আমি মনে করি কোডের একটি সুবিধা হ'ল আপনি গিটের মতো সংস্করণ নিয়ন্ত্রণ সিস্টেমে আপনার সমস্ত পরিবর্তন ব্যাক আপ করতে পারেন। যেহেতু আপনার সমস্ত সারণী এবং সম্পর্কগুলি কেবলমাত্র ক্লাসগুলিতে সঞ্চিত রয়েছে, আপনি সময়মতো ফিরে যেতে পারেন এবং আপনার ডাটাবেসের কাঠামোটি আগে কী ছিল তা দেখতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.