سؤال

هل هناك طريقة لاستخدام Rhino.Commons مع يجيد Nhibernate، (في AutoMapping معين)؟

وشكرا جزيلا

وfromano

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

المحلول

# # # # # # # # # #

وUPDATE:
وقد كتب هذا الجواب في فبراير من عام 2009. ومع معدل أن المشروع FluentNHibernate آخذة في التغير، فمن المحتمل جدا أن الطريقة تمت إعادة تسمية، أو تم نقل آلية لاتفاقيات المتغيرة.

# # # # # # # # # #

وكنت أرغب في استخدام DatabaseTextFixtureBase من Rhino.Commons.ForTesting مع FluentNHibernate. والمشكلة هي أن ظللت الخروج ضد حقيقة أن FluentNHibernate يضيف انها سحرية لتكوين NHibernate في فئة PersistenceModel، والحصول على يديك على تكوين NHibernate بمجرد استدعاء DatabaseTestFixtureBase.InitializeNHibernateAndIoC () Rhino.Commons لا حفنة من الاشياء الخاصة ولم يعد لديك الوصول إلى التكوين NHibernate.

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

وتنفيذ INHibernateInitializationAware أن أستخدمه يبدو مثل هذا:

public class FluentNHibernateInitializationAwareConfigurator : INHibernateInitializationAware
{
    public void BeforeInitialization(){}

    public void Configured(Configuration cfg)
    {
        var persistenceModel = new PersistenceModel
                                   {
                                       Conventions =
                                           {
                                               GetForeignKeyName = (prop => prop.Name + "Id"),
                                               GetForeignKeyNameOfParent = (prop => prop.Name + "Id")
                                           }
                                   };
        persistenceModel.addMappingsFromAssembly(typeof(OneOfMyMappingClasses).Assembly);
        persistenceModel.Configure(cfg);

    }

    public void Initialized(Configuration cfg, ISessionFactory sessionFactory){}
}

وبطبيعة الحال يمكن استبدال اتفاقيات من قبل أي أن كنت يحدث ليكون باستخدام.

واستمتع!


إذا كنت تستخدم أحدث إصدار من FluentNHibernate قد تكون تستخدم الطبقة بطلاقة لتكوين تعيينات الخاص بك. وهنا نسخة أخرى من FluentNHibernateInitializationAwareConfigurator:

public class FluentNHibernateInitializationAwareConfigurator : INHibernateInitializationAware  
{  
    public void BeforeInitialization(){}  

    public void Configured(Configuration cfg)  
    {
        Fluently.Configure().Mappings(m =>
        {
            m.FluentMappings.AddFromAssemblyOf<User>()
                .AlterConventions(convention =>
                    {
                        convention.GetForeignKeyName = (prop => prop.Name + "Id");
                        convention.GetForeignKeyNameOfParent = (prop => prop.Name + "Id");
                    }
                );
            m.Apply(cfg);
        });
    }  

    public void Initialized(Configuration cfg, ISessionFactory sessionFactory){}
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top