سؤال

أحاول ترحيل تطبيق ويب موجود لاستخدام RavendB.

لدي حاليًا صفحات في تطبيق الويب الخاص بي والتي تتيح لك عرض الفئات والفئات الفرعية والموارد بناءً على معرف في QueryString.

ومع ذلك ، لاحظت أن RavendB يولد معرفات للجذور الكلية ، ولكن ليس للكيانات الفرعية.

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

هل أنا مخطئ في جعلها حجة فرعية لأنني تصل إليها مباشرة من خلال هويتها التي مرت على QueryString؟ ولكن إذا لم يكن الأمر كذلك ، فكيف يمكنني الوصول إلى الفئات الفرعية الفردية لأن RavendB لا يبدو أنه يولد معرفات للكيانات التي لا تجمع الجذور؟

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

المحلول

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

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

نصائح أخرى

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

في النهاية ، قررت السماح للخادم بإنشاء المعرف بالنسبة لي باستخدام طريقة endrengedOcumentKey مثل ذلك:

using (var session = Store.OpenSession())
{
    if(category.SubCategories != null)
    {
       var newSubCategories = data.BankAccounts.Where(x => string.IsNullOrEmpty(x.Id));
        foreach (var sc in newSubCategories)
            sc.Id = session.Advanced.Conventions.GenerateDocumentKey(sc);    
    }

    session.Store(data);
    session.SaveChanges();
}

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

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