Fluent Mapping和NHibernate Xml配置

时间:2012-09-11 17:50:55

标签: nhibernate orm fluent-nhibernate

我有一个使用NHibernate的应用程序,我正在使用Fluent NHibernate来映射我的实体。它工作正常,但是,我想使用NHibernate的本机方式创建SessionFactory,因为我的团队将在其他项目上使用这个库,所以我们需要这个灵活性来移动nhibernate.cfg.xml。我的问题是:如何在本地方式为nhibernate的SessionFactory配置中设置Fluent Mappings?

我在配置方法上尝试这样的事情:

private static ISessionFactory Configure()
{
    if (_factory != null)
        return _factory;

    var configuration = new Configuration().Configure();

        // I could set my assembly of mapping here, but it's on our internal framework
    var fluentConfiguration = Fluently.Configure(configuration)
        //.Mappings(c => c.FluentMappings.AddFromAssembly(typeof(ProductMap)))
        .BuildConfiguration();

    _factory = fluentConfiguration.BuildSessionFactory();

    return _factory;
}

我尝试用xml设置它,但它不起作用。

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <session-factory>     
        <!-- other configs here...-->     
        <mapping assembly="MyApplication.Data.Mapping" />
    </session-factory>
</hibernate-configuration>

我不知道是否有办法在xml上设置此映射,并在我的方法上传递给FluentConfiguration声明来创建ISessionFactory

谢谢你们。

1 个答案:

答案 0 :(得分:0)

配置中的映射不起作用,因为它不会考虑Fluentmappings(Nhibernate不知道FluentNhibernate)。你必须通过代码设置它。我能想到的最佳选择是在构建sessionfactory之前实现一个钩子来改变配置对象:

private static ISessionFactory Configure()
{
    if (_factory != null)
        return _factory;

    var configuration = new Configuration().Configure();

    foreach(var alteration in alterations)
    {
        alteration.AddTo(configuration);
    }

    _factory = fluentConfiguration.BuildSessionFactory();

    return _factory;
}

// in your alteration
Configuration AddTo(Configuration config)
{
    return Fluently.Configure(config)
               .Mappings(c => c.FluentMappings.AddFromAssembly(typeof(ProductMap)))
               .BuildConfiguration();
}