2

我遇到了 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。我假设我缺少的语法发生了变化。任何和所有的帮助将不胜感激。

谢谢!约翰

4

1 回答 1

4

Fluent NHibernate 使用Assembly.GetExportedTypes()方法从给定程序集中获取所有覆盖。正如此方法的文档所述,它获取在此程序集中定义的公共类型,这些公共类型在程序集外可见。您的覆盖是隐含的internal。只需添加public之前class UserMap,它会工作。

于 2011-10-20T17:17:48.180 回答