1

IAutoMappingOverrideを除いて、SharpArchitectureがクラスで設定したすべてのものを正しくマップするという問題がありますFormula。これらは単に無視されるためinvalid identifier、データベースにクエリを実行しようとするとSQLが取得されます。

// 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)))");
    }
}

何か案は?

4

2 に答える 2

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)); 
            } 
        } 
    } 
于 2011-05-16T04:06:25.490 に答える
0

これは Sharp Architecture の問題ではなく、Fluent Nhibernate の問題です。どのバージョンの FNH を使用していますか?

于 2011-05-16T03:06:24.583 に答える