أفضل .صافي الحل في كثير من الأحيان تغيير قاعدة البيانات [مغلقة]

StackOverflow https://stackoverflow.com/questions/11878

سؤال

أنا حاليا يصمم صغيرة الخام تطبيق.قاعدة البيانات الخاصة بهم هو فوضى كبيرة و سيتم تغيير في كثير من الأحيان على مدى 6 أشهر إلى سنة.ماذا تنصحين عن البيانات طبقة:

1) ORM (إذا أي واحد؟)

2) Linq2Sql

3) الإجراءات المخزنة

4) Parametrized الاستفسارات

أنا حقا بحاجة إلى حل من شأنها أن تكون ديناميكية بما فيه الكفاية (على حد سواء بسرعة وسهولة) حيث كنت يمكن أن تحل محل الجداول وإضافة/حذف الأعمدة في كثير من الأحيان.

ملاحظة:ليس لدي الكثير من الخبرة مع ORM (إلا قليلا دون سرعة الصوت) و عموما تميل إلى استخدام الإجراءات المخزنة لذلك ربما هذا من شأنه أن يكون وسيلة للذهاب.أنا أحب أن تعلم Ling2Sql أو NHibernate إذا إما أن يسمح الوضع لقد المذكورة أعلاه.

هل كانت مفيدة؟

المحلول

مفتاح واحد شيء أن تكون على علم هنا هو أنه إذا كان مخطط قاعدة البيانات هو تغيير في كثير من الأحيان, كنت تريد أن يكون بعض مستوى من وقت الترجمة نوع الأمان.لقد وجدت هذا وجود مشكلة مع NHibernate لأنه يستخدم الخرائط xml الملفات حتى إذا قمت بتغيير شيء ما في مخطط قاعدة البيانات الخاصة بك, كنت لا أعرف حتى وقت التشغيل التي رسم خرائط مكسورة.

وسوف تكون أيضا مشكلة مع تخزين procs.

باستخدام Linq2Sql سوف تعطيك ميزة معرفة أين بالضبط التعليمات البرمجية الخاصة بك كسر عند تغيير المخطط في وقت الترجمة.هذا بالنسبة لي هو شيء من شأنها أن تأخذ الأسبقية على كل شيء إذا أنا أعمل مع كثير من الأحيان تغيير المخطط

نصائح أخرى

كنت أنظر دون سرعة الصوت مع بناء مزود (موقع المشروع) الإعداد.يعمل كبيرة لأنها تجدد تلقائيا الدال الكائنات في كل مرة كنت بناء المشروع الخاص بك حتى إذا كانت قاعدة البيانات التغييرات في الطريقة التي تخالف التعليمات البرمجية الخاصة بك ، يمكنك الحصول على خطأ بناء.

انها عملت بشكل جيد حتى مخطط قاعدة البيانات لديك حقا معقدة وكنا ضرب حدود ActiveRecord نمط, ولكن طالما أن المخطط ليس معقد بشكل كبير أنه يعمل بشكل جيد جدا.مرة واحدة المخطط تستقر ، يمكنك التبديل حتى أن كنت فقط بناء الدال عندما تريد.

بالتأكيد كنت ترغب في استخدام ORM.أي ORM على ما يرام, ولكن إذا كنت تريد شيئا التي سوف تولد بقوة كتبته الطبقات.عندما الحقول الحصول على إضافة أو تعديل أو حذف من جدول تريد أن تكون قادرة على تجديد تلك الطبقات ، والتعامل مع تحديد وقت الترجمة أخطاء فقط.إذا كنت تستخدم نموذج ديناميكي, أنت من المحتمل أن يكون العديد من سيئة أخطاء وقت التشغيل.هذا مهم جدا!أنا جزء من MyGeneration فريق التطوير على سورس, و أنا أعتقد أن هذا هو الحل لمشكلتك.يمكنك توليد dOOdads ، NHibernate, EasyObjects, EntitySpaces ، إلخ.إذا كنت تريد أن تذهب مع أكثر تكلفة حل ، انتقل مع CodeSmith أو LLBLGen برو.حظا سعيدا - أي شخص مهتم في استخدام MyGeneration, لا تتردد في الاتصال بي مع الأسئلة.

NHibernate, ولكن فقط إذا كنت سوف تكون قابلة وجود كائن النهج الأول حيث يمكنك تحديد فئات ، ومن ثم تحديد المطلوب بنية الجدول في رسم الخرائط الملفات ثم قم بإنشاء مخطط قاعدة البيانات باستخدام NHibernate بنيت في مخطط الجيل الطبقات.

من أجل القيام بذلك بطريقة أخرى (على سبيل المثال, لديك مجموعة من الجداول ومن ثم لكم قاعدة الخاص بك تصميم الكائن على ذلك) لقد وجدت MyGeneration + NHibernate العمل ، على الرغم من أنني لست سعيدا مع الناتج الطبقات (أساسا لأنني متمسك صحيح وجوه المنحى البرمجة).

لو كنت مكانك كنت في محاولة للاستفادة من ما عرفت (sprocs) مع Linq2Sql.Linq2Sql لا sprocs ولكن ثم لديك مكافأة إضافية من وضع أداة جديدة في الحزام الخاص بك.وأعتقد أن وجود فهم على Linq2XXX (X كونها عشوائية التكنولوجيا الكبار الترفيه....وهي ليست فكرة سيئة الآن أن أفكر في ذلك) جملة ومنهجية ستكون إضافة رائعة إلى مجموعة من المهارات الخاصة بك باستخدام Linq على مجموعة من الكائنات هو طريقة حلوة.

ولكن في نهاية المطاف شيئا مثل NHibernate سوف تناسبك أفضل على المدى الطويل.

EntitySpaces يمكن تجديد الخاص بك الدال/طبقة رجال الأعمال في دقيقة واحدة ، و أي رمز الخسارة ، انظر النسخة التجريبية ==> هنا

لا يلزم من التسجيل ، يعمل تحت Visual Studio كذلك.

استخدام EntitySpaces.سوف ترسل لي الزهور, مضمونة.ببساطة رهيبة.تغيير db كما تريد.ضرب زر الانفجار.جميع التغييرات تتم.دون تغيير التعليمات البرمجية المخصصة.أنا أحب ذلك.

كيف بسيط هو التطبيق ؟ إذا كنت تعمل مع مخطط/تصميم الاشياء لبضعة أشهر, و لا تقلق حول التطبيق الفعلي ...وأود أن تنظر في استخدام EDM بيانات ديناميكية الكيانات مشروع تطبيق ويب.هذا على الذهاب مع أقل قدر من الجهد, في رأيي.وهذا يجعلك تركز على مخطط البيانات وغيرها من groovey الأشياء.نأمل أن لا تحصل على الكثير من سالب المطبات من هذا واحد!

هنا كيفية الحوار مشروع جديد سوف تبدو مثل هذا

كنت بالفعل سعيدا مع تخزين procs وأنها قد تكون كافية مجردة بعيدا تغيير المخطط.إذا ORMs تكن سعيدة مع تخزين procs ثم ربما أنها سوف تعمل مع إطلالات على أن تبقى الجارية على أعلى من تغيير المخطط.

إذا كان مخطط قاعدة البيانات تغييرات في كثير من الأحيان ، تفضل إطار الكيان على LINQ2SQL.إذا كانت التغييرات المخطط باستخدام L2S عليك
1) إزالة وإعادة تضيف لك الجدول (فقدان التخصيصات الخاصة بك)
2) تعديل نموذج باليد (كما فعلت هنا في ستاكوفيرفلوو)

EF هو فائقة مجموعة من L2S, مما يتيح لك المزيد من المرونة و الاستخدام dbms الاستقلال

ننظر لماذا كان يتغير ، ومعرفة ما إذا كان يمكنك توقع تعميم أنواع التغييرات القادمة في لكم بحيث لا كسر رمز

الإطار قد جعل استيعاب التغييرات أسهل, ولكن تحليل أعمق سوف يكون على المدى الطويل تستفيد

أي حل يمكن أن تعمل ما تحتاجه حقا هو مجموعة من الاختبارات التي سوف تضمن أن العملية الأساسية مثل "إدراج" ، حدد تحديث وحذف يعمل.بهذه الطريقة يمكنك ببساطة تشغيل الاختبارات الخاصة بك ومعرفة ما اذا كان تعيينات هي ما يصل إلى تاريخ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top