2010-11-23 15 views
0

j'ai le modèle suivant:NHibernate jointure interne une table sans une propriété en classe

public class FlatMap : ClassMap<Flat> 
    { 
     public FlatMap() 
     { 
      Id(m => m.FlatID).GeneratedBy.Identity(); 
      Map(m => m.Name); 
      Map(m => m.Notes); 
      Map(m => m.Released); 
     } 

    } 
public class BuildingMap : ClassMap<Building> 
{ 
    public BuildingMap() 
    { 
     Id(i => i.BuildingID).GeneratedBy.Identity(); 
     Map(m => m.Name); 
     HasMany<Flat>(m => m.Flats).Cascade.All().KeyColumn("BuildingID").Not.LazyLoad(); 
    } 
} 

public class ContractMap : ClassMap<Contract> 
    { 
     public ContractMap() 
     { 
      Id(m => m.ContractID).GeneratedBy.Identity(); 
      Map(m => m.Amount); 
      Map(m => m.BeginIn); 
      Map(m => m.EndIn); 
      References(m => m.RentedFlat); 
     } 
    } 

comment puis-je faire la requête suivante en utilisant Fluent NHibernate?

Select * From Contract 
Inner Join Flat On Contract.RentedFlatID = Flat.ID 
Inner Join Building On Building.BuildingID = Flat.BuildingID 
Where Building.BuildingID = @p0 

surtout pas de référence de Flat à Building ?? et je ne le veux pas!

bien sûr la référence je parle afin de pouvoir faire quelque chose comme ça

var criteria = session.CreateCriteria<Contract>().CreateCriteria ("RentedFlat").CreateCriteria ("Building"/*there is no such property in Flat class*/); 

Répondre

0

i résolu un problème, mais pas la façon que je pense est bon. mais je vais faire cela comme une réponse jusqu'à ce que quelqu'un me fournir une meilleure solution.

ajouter une BuildingID de propriété à la classe Flat, et modifié la classe de mise en correspondance à:

Map(m => m.BuildingID); 

maintenant je peux faire la requête suivante:

criteria.CreateCriteria("RentedFlat") 
      .Add(Restrictions.Eq("BuildingID", selectedBuilding.BuildingID)); 
Questions connexes