自定义Fluent NHibernate映射不适用于AutoMapping

时间:2011-10-19 13:33:22

标签: 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 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");
            };
    }
}

我已经尝试对配置进行各种修改,并在Fluent NHibernate上倾听互联网文章,但无济于事。我有一个使用Sharp Arch 1.x的工作版本,以及早期版本的NHibernate和Fluent。我假设我缺少语法上的变化。任何和所有的帮助将不胜感激。

谢谢! 约翰

1 个答案:

答案 0 :(得分:4)

Fluent NHibernate使用Assembly.GetExportedTypes() method来获取给定程序集的所有覆盖。正如此方法的文档所述,它获得此程序集中定义的公共类型在程序集外。您的覆盖隐式内部。只需在public之前添加class UserMap即可。