【问题标题】:Fluent Mapping and NHibernate Xml ConfigurationFluent 映射和 NHibernate Xml 配置
【发布时间】:2012-09-11 17:50:54
【问题描述】:

我有一个使用 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。

谢谢你们。

【问题讨论】:

    标签: nhibernate orm fluent-nhibernate


    【解决方案1】:

    config 中的映射不起作用,因为它不会考虑 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();
    }
    

    【讨论】:

    • 是的,我创建了一个静态属性来设置程序集,并在它不为空时将其添加到 .Mappings(c=>c....) 方法中。它可以工作,但我想读取 xml 文件中的程序集名称并由 .Mappings(..) 上的代码设置。还是谢谢你!
    • 您可以使用 xpath 自己读取休眠配置文件并在那里获取映射程序集。 Hibernate 使用流畅的映射程序集没有问题
    • 很好,我会尝试这样的。再次感谢@Firo
    猜你喜欢
    • 2011-04-10
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 2012-04-03
    • 1970-01-01
    • 2013-01-07
    • 2013-04-04
    相关资源
    最近更新 更多