سؤال

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

  • object Assemble(object cached, object owner);
  • object DeepCopy(object value);
  • object Disassemble(object value);
  • object Replace(object original, object target, object owner);

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

public object DeepCopy(object value)
{
    return value;
}

public object Replace(object original, object target, object owner)
{
    return original;
}

public object Assemble(object cached, object owner)
{
    return cached;
}

public object Disassemble(object value)
{
    return value;
}

كيفية تنفيذ هذه الأساليب بشكل صحيح في حالة حقيقية أو سيناريو أكثر تعقيدًا؟

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

المحلول

ألق نظرة على كيفية قيام ريتيش راو بهذا في Ncommon إطار العمل:

ال MoneyUserType ينفذ فئة قاعدة تسمى CompositeUserTypeBase

هناك المزيد من التفاصيل في التعليقات ولكن لتلخيص:

  • DeepCopy - يجب أن تعيد نسخة عميقة من الحالة المستمرة ، والتوقف في الكيانات وفي المجموعات
  • تفكيك - يحول الكائن إلى تمثيله "القابل للتخطيط" (يجب أن يتم تخزين جمعيات الجمعيات كقيم المعرفة)
  • تجميع - إعادة بناء كائن من التمثيل القابل للتخطيط

تم شرحه بمزيد من التفاصيل هنا

نصائح أخرى

قد ترغب في التحقق من هذا مقالة - سلعة. إنه مثال جيد على كيفية تنفيذ واجهة iusertype.

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