هل يمكنك التغيير من فئة أساسية إلى نوع من الفئة الفرعية المرتبطة في Nhibernate؟

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

سؤال

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

public class Document
{
   public int ID { get; set; }
   public string FilePath { get; set; }
}

public class Certificate : Document
{
   // certificate-specific fields
}

public class Correspondence : Document
{
   // correspondence-specific fields
}

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

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

المحلول

لسوء الحظ ، لا يسمح لك Nhibernate بالتبديل بين الفئات الفرعية بعد الإنشاء الأولي ؛ للحصول على هذا العمل بالطريقة التي تريدها ، لديك 3 خيارات:

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

نصائح أخرى

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

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