自定义Fluent NHibernate贴图不使用自动映射

自定义Fluent NHibernate贴图不使用自动映射,nhibernate,fluent-nhibernate,nhibernate-mapping,fluent-nhibernate-mapping,sharp-architecture,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,Fluent Nhibernate Mapping,Sharp Architecture,我对Fluent NHibernate AutoPersistenceModelGenerator有问题。它不想拾取自定义地图 使用Sharp Architecture 2.0、Fluent NHibernate 1.2和NHibernate 3.1 我目前的相关配置如下: public AutoPersistenceModel Generate() { // This mappings group works with the exception of cust

我对Fluent NHibernate AutoPersistenceModelGenerator有问题。它不想拾取自定义地图

使用Sharp Architecture 2.0、Fluent NHibernate 1.2和NHibernate 3.1

我目前的相关配置如下:

    public AutoPersistenceModel Generate()
    {
        // This mappings group works with the exception of custom maps!!
        var mappings = AutoMap.AssemblyOf<SecurableEntity>(new AutomappingConfiguration());
        mappings.Conventions.Setup(GetConventions());
        mappings.IgnoreBase<Entity>();
        mappings.IgnoreBase<SecurableEntity>();
        mappings.IgnoreBase(typeof(EntityWithTypedId<>));
        mappings.UseOverridesFromAssemblyOf<AutoPersistenceModelGenerator>();

        //mappings.UseOverridesFromAssemblyOf<UserMap>(); // Should call Override method of UserMap, but doesn't appear to...
        mappings.Override<User>(new UserMap().Override()); // This hack fixes the issue with calling the Override method of UserMap.
        mappings.UseOverridesFromAssemblyOf<UserMap>();

        return mappings;
    }

class UserMap : IAutoMappingOverride<User>
{
    public void Override(AutoMapping<User> mapping)
    {
        //mapping => mapping.Table("Users");
        mapping.Table("Users");
    }

    public Action<AutoMapping<User>> Override()
    {
        return map =>
            {
                map.Table("Users");
            };
    }
}
public AutoPersistenceModel Generate()
{
//此映射组适用于自定义映射除外!!
var mappings=AutoMap.AssemblyOf(新的AutomappingConfiguration());
mappings.Conventions.Setup(GetConventions());
mappings.IgnoreBase();
mappings.IgnoreBase();
IgnoreBase(typeof(EntityWithTypedId));
mappings.UseOverridesFromAssemblyOf();
//mappings.UseOverridesFromAssemblyOf();//应调用UserMap的Override方法,但似乎不。。。
mappings.Override(new UserMap().Override());//这个黑客通过调用UserMap的Override方法修复了这个问题。
mappings.UseOverridesFromAssemblyOf();
返回映射;
}
类UserMap:IAutoMappingOverride
{
公共无效替代(自动映射)
{
//mapping=>mapping.Table(“用户”);
映射表(“用户”);
}
公共行动凌驾
{
返回映射=>
{
地图表格(“用户”);
};
}
}
我尝试过对配置进行各种修改,并在互联网上发表了大量关于Fluent NHibernate的文章,但都无济于事。我有一个使用Sharp Arch 1.x的工作版本,以及NHibernate和Fluent的早期版本。我假设语法上有一个变化,但我没有。我们将非常感谢您的任何帮助

谢谢大家!!
John

Fluent NHibernate用于从给定程序集获取所有重写。正如此方法的文档所述,它获取在此程序集中定义的、在程序集外部可见的public类型。您的覆盖是隐式的内部的。只需在
class UserMap
之前添加
public
,它就会起作用。

哇,我为此道歉。很难相信我花了这么长时间研究这个问题,却没有注意到缺少的公共访问修饰符……如果你觉得答案有用,就投票吧。如果它解决了您的问题,请将其标记为答案。谢谢一个非常有用的答案<代码>约定。AddFromAssemblyOf可以很好地处理内部类型,所以我永远不会认为
UseOverridesFromAssemblyOf
做不到。这很不一致。