私は以下のような国と州のドメインモデルを持っています(下記参照)。NHibernate/Hibernateでの集約オブジェクトの照会
私は、(Crieteria APIまたはHQLを使用して)特定の国のすべての州を取得したいと考えています。私はCountryCodeをパラメータとして受け取ります。
私はNHibernateの中で理解して何から、私は国をロードし、その後、私のcrieriaにExpression.Eq()を作ることができるように「国オブジェクト」と私の第二のリポジトリへの呼び出しを発行する必要があります。特定の国のすべての州を取得する方法はありますか?したがって、単一のクエリを使用しますか?私は単純なSQL内部結合を行い、そして国コードに制約を追加したいだけです。
投影とは関係があると確信していますが、私が見つけた唯一の例は単一のモデルのためであり、私が意図するものではないaggreate関数の使い方を示しています。
ありがとうございました!
私の現在のリポジトリの呼び出しは次のようになります。
public IList<Model.StateProvinces> LoadStateProvincesForAutocomplete(string partialName, string countryCode)
{
CountryRepository countryRepo = new CountryRepository();
Model.Country currentCountry = countryRepo.Get(countryCode);
return
_session.CreateCriteria<Model.StateProvince>()
.Add(Expression.Eq("Country", currentCountry))
.Add(Expression.Like("Name", partialName, MatchMode.Anywhere))
.List<Model.StateProvince>();
}
そして、私のモデルは、以下のように定義されています。あなたはICriteriaにラムダ拡張を使用する場合
public class Country
{
public virtual int Id { get; set; }
public virtual string Code { get; set; }
public virtual string NameEn { get; set; }
public virtual string NameFr { get; set; }
public virtual List<Model.StateProvince> StateProvinces { get; set; }
}
public class StateProvince
{
public virtual Country Country { get; set; }
public virtual int Id { get; set; }
public virtual string Code { get; set; }
public virtual string NameEn { get; set; }
public virtual string NameFr { get; set; }
}
ありがとうございますが、私は次のエラーで終わります。ラムダ式をデリゲートタイプではないため 'NHibernate.Criterion.ICriterion'に変換できません –
NHibernate Lambda Extensionsを使用する必要があります。コアのNHibernateライブラリへのアドオン。 http://code.google.com/p/nhlambdaextensions/から入手できます。私はNH Criteriaモデル全体が既に世代の背後にあるので、Linq 2 NHibernateを個人的にお勧めします。 – KeithS
あなたの時間に感謝キース!私は明日の朝Linq2 NHibernateをチェックするつもりだ! –