2010-11-23 4 views
0

Ich habe folgendes Modell:nhibernate innere Verknüpfung einer Tabelle ohne Eigenschaft in der Klasse

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

wie kann ich die folgende Abfrage mit fließend nhibernate machen?

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

vor allem gibt es keine Referenz von Wohnung zu Gebäude? und ich will es nicht sein!

natürlich die Referenz ich reden werde, um die Lage zu sein, etwas zu tun, wie dies

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

Antwort

0

ich ein Problem gelöst, aber nicht die Art und Weise, wie ich denke, ist gut. aber ich werde dies als eine Antwort machen, bis mir jemand eine bessere Lösung anbietet.

i fügen Sie eine Eigenschaft BuildingID auf der Flat-Klasse und modifiziert, um die Mapping-Klasse:

Map(m => m.BuildingID); 

jetzt kann ich die folgende Abfrage tun:

criteria.CreateCriteria("RentedFlat") 
      .Add(Restrictions.Eq("BuildingID", selectedBuilding.BuildingID)); 
Verwandte Themen