Rhino.Commons + Fluent NHibernate

3
有没有一种方法可以将Rhino.Commons与Fluent Nhibernate一起使用(特别是AutoMapping)?
非常感谢。
fromano
1个回答

2

# # # # # # # # # #

更新:
这篇答案是在2009年2月写的。由于FluentNHibernate项目的变化速度非常快,很可能该方法已被重命名,或者更改约定的机制已经移动。

# # # # # # # # # #

我想在Rhino.Commons.ForTesting中使用DatabaseTextFixtureBase和FluentNHibernate。 问题在于,FluentNHibernate在PersistenceModel类中向NHibernate配置添加了其魔力,一旦调用DatabaseTestFixtureBase.InitializeNHibernateAndIoC()就无法获取NHibernate配置,因为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,则可能正在使用Fluently类来配置映射。这里是另一个版本的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){}
}

谢谢,我会尝试并告诉你! - fromano

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接