سؤال

لذلك، newbie nhibernate المستخدم؛ تحاول لف ذهني حولها.

أفكر في كيفية التعامل مع النشر، وحقن الوظائف الإضافية لاحقا إلى تطبيق ويب (قد يتطلب فئات الثبات الخاصة بهم).

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

  if(!_cfg.HasSchemaForType(typeof(MyType))
       ExportSchema(typeof(MyType));
  else
       UpdateSchema(typeof(MyType));

حيث تستخدم الوظائف داخليا SchemaExport أو SchemaUpdate, ، على التوالى.


تحرير: الرجال، وأنا أقدر الإجابة حتى الآن، لكنهم في عداد المفقودين النقطة قليلا. ما أحاول إعداده هو وسيلة للتطبيق للسماح بإضافة وإزالة الإضافات التي قد تتطلب تغييرات على DB. أنا لا أتحدث عن الإصدار الرمز الخاص بي أو مثل (على الأقل، وليس كوظيفته الأساسية). لذلك يكون السؤال أقل عند نشر التطبيق، وأكثر من ذلك عند إضافة أو إزالة مكون إضافي. هل تم نشر البرنامج المساعد Theis (وبالتالي التحقق من نوع الكود الزائف) من قبل؟ إذا كان الأمر كذلك، قم بتشغيل التحديث. إذا لم يكن كذلك، قم بتشغيل التصدير. منطقي؟

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

المحلول

لا، Limbernate لا يفعل ما تسأل. أتصور أنه سيكون من الممكن كتابة بعض التعليمات البرمجية التي صدرت المخطط ثم قارنتها بمخطط قاعدة البيانات. ولكن من المحتمل أن يكون من الأسهل التصدير في قاعدة بيانات مؤقتة واستخدام أداة للحزب الثالث، مثل Redgate SQL مقارنة، لمقارنة المخططات.

حتى لو فعلت ما تطرحه، لا أرى كيف سيساعد ذلك في النشر لأن هدفها هو إنشاء قاعدة بيانات من نقطة الصفر.

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

  • محاولة تحميل أحد كائنات المساعدات الإضافية والقبض على الاستثناء.
  • فحص مخطط قاعدة البيانات (باستخدام SMO ل SQL Server) للتحقق مما إذا كان الجدول (الجدول) الموجود.
  • قم بإنشاء سجل في جدول عند نشر البرنامج المساعد.

نصائح أخرى

أعتقد أن ما تبحث عنه هو SchemaUpdate.Execute بدلا من استخدام SchemaExport. SchemaUpdate سينشئ المخطط إذا لم يكن موجودا بالفعل، أو تحديثه إذا لزم الأمر ومطلوب.

التي تعمل بالنسبة لي باستخدام كل من MSSQL و SQLite.

new SchemaUpdate(config).Execute(false, true);

نعم هناك، في 3.0 على الأقل

public static bool ValidateSchema()
{
    NHibernate.Tool.hbm2ddl.SchemaValidator myvalidator = new NHibernate.Tool.hbm2ddl.SchemaValidator(m_cfg);
    try
    {
        myvalidator.Validate();
        myvalidator = null;
        return true;
    }
    catch (Exception ex)
    {
        MsgBox(ex.Message, "Schema validation error");
    }
    finally
    {
        myvalidator = null;
    }

    return false;
}

بالنسبة لجزء التحديث، افعل.

public static void UpdateSchema()
{
    NHibernate.Tool.hbm2ddl.SchemaUpdate schema = new NHibernate.Tool.hbm2ddl.SchemaUpdate(m_cfg);
    schema.Execute(false, true);
    schema = null;
} // UpdateSchema

الغرض من تصدير المخطط هو إنشاء المخطط الكامل من الصفر. مفيد حقا إذا لم تكن قد نشرت طلبك حتى الآن.

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

إلقاء نظرة على:

فيما يلي قائمة بأدوات ترحيل المزيد من. NET أجاب في سؤال حتى:

نشأت الفكرة الأصلية للهجرة من روبي على القضبان وتم "استنساخ" في أطر أخرى على مدى الماضي. لهذا السبب من الجيد بالتأكيد أن تقرأ عن الفكرة الأصلية في http://guides.rubyonrails.org/migrations.html. جدا.

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

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