سؤال

هذا واحد قد خدش رأسي، لذلك آمل أن يساعدني الزوج الثاني من العينين هنا.

اقامة:

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

لدي كائنات نقل البيانات: مدونة، وظيفة، Dialententity المستخدم موجودة في مساحة الاسم الأساسية. كائنات نقل البيانات تحت Core.domain.model

لدي رمز منشئ الجلسة التالية:

return Fluently.Configure()
    .Database(SQLiteConfiguration.Standard.UsingFile("c:\blog.db"))
    .Mappings(x => x.AutoMappings.Add(
        AutoPersistenceModel.MapEntitiesFromAssemblyOf<Blog>()
            .Where(type => 
                type.Namespace.EndsWith("Domain.Model") &&
                !type.IsAbstract &&
                type.IsClass &&
                type.GetProperty("Id") != null)    
     )).BuildSessionFactory();

عندما أحاول اختبار استفسار بسيط، أحصل على استثناء تطبيق في التعليمات البرمجية أعلاه (في مكان ما) ورسالة الخطأ هي:

System.ApplicationException: خطأ أثناء محاولة إنشاء مستند تعيين "core.domain.domainentity" ---> nhibernate.mphappexception: تعذر ترجمة مستند التعيين: (xmldocument) ---> system.indexoutofrangeException: كان الفهرس خارج حدود الصفيف.

يبدو أن الكود الخاص بي / أحمق يحاول تعيين domainentity، ولكنه فشل. اعتقدت بلدي الكود أعلاه ذكر صراحة ليس لتعيين هذا الكائن باستخدام type.namespace.endswith ("domain.model"). هل هذا صحيح؟ أين أنا ذاهب إلى ضعي هنا؟

شكرا على اي وكل مساعدة.

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

المحلول

يبدو أنني نسيت السطر التالي:

.WithSetup(a => a.IsBaseType = type => type == typeof(DomainEntity))

لذلك، في مجمله، يبدو رمز الآلي الجديد الخاص بي مثل هذا:

return Fluently.Configure()
                .Database(SQLiteConfiguration.Standard.UsingFile("c:\\blog.db"))
                .Mappings(x => x.AutoMappings.Add(
                   AutoPersistenceModel.MapEntitiesFromAssemblyOf<Blog>()
                       .WithSetup(a => a.IsBaseType = type => type == typeof(DomainEntity))
                       .Where(type =>
                           type.Namespace.EndsWith("Domain.Model") &&
                           !type.IsAbstract &&
                           type.IsClass &&
                           type.GetProperty("Id") != null)
                   )).BuildSessionFactory();

يبدو أن هذا قد تطهير خطأي الصحيح.

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