2013-10-09 2 views
1

J'ai un fichier de mappage NHibernate que je veux convertir en courant. Je suis coincé avec ce un cas particulier:Plusieurs-à-un avec la formule

<many-to-one name="LastChildRevision" update="false" not-found="ignore" access="readonly" fetch="join"> 
    <formula>(SELECT TOP(1) CHILD_REVISION.CHILD_REVISION_ID FROM CHILD_REVISION WHERE CHILD_REVISION.PARENT_ID = PARENT_ID ORDER BY CHILD_REVISION.REVISION_NUMBER DESC)</formula> 
</many-to-one> 

Ma classe a:

public virtual IList<ChildRevision> ChildRevisions { get; set; } 

public virtual ChildRevision LastChildRevision 
{ 
    get 
    { 
     return this.ChildRevisions.OrderBy(o => o.RevisionNumber).LastOrDefault(); 
    } 
} 

Comment puis-je traduire à Fluent NHibernate? Quand j'essaie ceci:

References(x => x.LastChildRevision) 
    .Formula("(SELECT TOP(1) CHILD_REVISION.CHILD_REVISION_ID FROM CHILD_REVISION WHERE CHILD_REVISION.PARENT_ID = PARENT_ID ORDER BY CHILD_REVISION.REVISION_NUMBER DESC)") 
    .Access 
    .ReadOnly() 
    .Fetch 
    .Join(); 

je reçois ceci:

Invalid column name 'LastChildRevision_id'. 

Merci!

Répondre

1

Je sais que j'ai demandé depuis longtemps cette question, mais j'ai décidé de revoir Fluent NHibernate, et voici ce que je suis venu avec:

References(x => x.LastChildRevision) 
    .Column("PARENT_ID") 
    .Not.Insert() 
    .Not.Update() 
    .Access.ReadOnly() 
    .NotFound.Ignore() 
    .Cascade.None() 
    .Formula("(SELECT TOP(1) CHILD_REVISION.CHILD_REVISION_ID FROM CHILD_REVISION WHERE CHILD_REVISION.PARENT_ID = PARENT_ID ORDER BY CHILD_REVISION.REVISION_NUMBER DESC)"); 
0

Il y avait un bug que vous pourriez toucher. Essayez d'effacer les premières colonnes

References(x => x.LastChildRevision) 
    .Columns.Clear() 
    .Formula("(SELEC ...