Sharp Architecture忽略了我的公式映射

时间:2011-05-09 14:11:24

标签: .net nhibernate fluent-nhibernate sharp-architecture

我遇到问题,Sharp Architecture会正确映射我在IAutoMappingOverride类中设置的所有内容,但Formula除外。这些被简单地忽略了,因此我在尝试查询数据库时得到了SQL invalid identifier

// NUnit setup
public virtual void SetUp()
{
    configuration = NHibernateSession.Init(
        new SimpleSessionStorage(),
        RepositoryTestsHelper.GetMappingAssemblies(),
        new AutoPersistenceModelGenerator().Generate(),
        null,
        null,
        null,
        FluentConfigurer.TestConfigurer.Contracts);

    new FluentConfigurer(configuration)
        .ConfigureNHibernateValidator()
        .ConfigureAuditListeners();
}


public AutoPersistenceModel Generate()
{
    return AutoMap.AssemblyOf<Contrato>(new AutomappingConfiguration())
        .Conventions.Setup(GetConventions())
        .IgnoreBase<Entity>()
        .IgnoreBase(typeof(EntityWithTypedId<>))
        .UseOverridesFromAssemblyOf<EmployeeMap>();
}

// My override.
public class EmployeeMap : IAutoMappingOverride<Employee>
{
    public void Override(AutoMapping<Employee> mapping)
    {
        // This works...
        mapping.Id(x => x.Id, "ID_EMPLOYEE");

        // This is ignored...
        mapping.Map(x => x.Name).Formula("UPPER(LTRIM(RTRIM(FIRST_NAME || ' ' || LAST_NAME)))");
    }
}

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

这不是Sharp Architecture的问题,它与Fluent Nhibernate存在问题。您使用的是哪个版本的FNH?

答案 1 :(得分:0)

我确认这是Fluent NHibernate(1.2.0.694)的问题。以前,列名映射会优先使用FluentMappingOverrides,但是 最新的将优先于“公约”。我修改了我的 约定,以排除包含公式映射的名称空间 现在好了。

    public class OracleUnderscoredNamingConvention : IPropertyConvention 
    { 
        public void Apply(IPropertyInstance instance) 
        { 
            // Previously worked without this condition. 
            if 
(Utils.WorkableDomainNamespaces.Contains(instance.Property.PropertyType.Nam espace)) 
            { 
instance.Column(OracleConventionSetter.ApplyOracleNamingConventions(instanc e.Property.Name)); 
            } 
        } 
    }