سؤال

لا يحب Nhibernate بطلاقة هذا ، ورمي خطأ:

{"جمعية المراجع فئة غير محددة: System.String"}

حسنًا ، يمكنني أن أرى سبب حدوث مشكلة - ولكن ما هو الحل الأفضل؟

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

أنا أيضًا لا أريد حقًا "سلسلة" جدول ، لأسباب واضحة.

أعتقد أنه يمكنني حل هذا عن طريق لف بلدي List<string> داخل الفصل ، ولكن هذا يشعر بالوزن الثقيل. بدأت أعتقد أنه أفضل حل.

ما هي أفضل طريقة للحصول على nhibernate بطلاقة للتعامل مع هذا؟

أتوقع تمامًا تخزين هذه القيم في جدول آخر. اعتقدت ربما أنني ربما تمكنت من إعداد بعض اتفاقية السيارات التي ترشد nhibernate "إذا رأيت أ class X يحتوي على List<*some primitive type*>, ، ثم المضي قدما وإنشاء جدول مرجعية تلقائيًا يقوم بتخطيط هذه المجموعة.

إنه شعور ثقيل بعض الشيء للذهاب ولف كل مجموعة واحدة في الفصل. إذا كان هذا هو الحل الأفضل ، فليكن ذلك.

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

المحلول

كان لدي نفس المشكلة بالضبط قبل بضعة أسابيع ، مع عوامات بدلاً من الأوتار.

How-do-you-automap-listfloat-or-float-fluent-nhibernate

اتضح أن السيارات لا تعمل مع الأنواع البدائية.

تحرير - لم يعد هذا صحيحًا - قام فريق FNH بإصلاح المشكلة

هناك الكثير من رمز النماذج في الإجابة المقبولة على سؤالي ، ولكن النقطة الأساسية هي إضافة تجاوز لقوائم الأنواع البدائية الخاصة بك ("Rawy" في المثال أدناه):

public class DlsAppOverlordExportRunData
{
    public virtual int Id { get; set; }
    // Note: List<float> needs overrides in order to be mapped by NHibernate.
    // See class DlsAppOverlordExportRunDataMap.
    public virtual IList<float> RawY { get; set; }
}


// Must be in different namespace from DlsAppOverlordExportRunData!!!
public class DlsAppOverlordExportRunDataMap : IAutoMappingOverride<DlsAppOverlordExportRunData>
{
    public void Override(AutoMapping<DlsAppOverlordExportRunData> mapping)
    {
        // Creates table called "RawY", with primary key
        // "DlsAppOverlordExportRunData_Id", and numeric column "Value"
        mapping.HasMany(x => x.RawY)
               .Element("Value");
    }
}

أتوقع نفس النهج للعمل مع ilists oftrings.

نصائح أخرى

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

يمكنك الآن ilists automap من أنواع القيمة c# (السلاسل ، ints ، العوامات ، إلخ).

فقط تأكد من أن لديك نسخة حديثة من FNH.

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

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