奇妙な問題があります。IList を持つエンティティをクエリすると、エンティティは空のままです。Languageエンティティ自体のクエリは可能です...これは私の複合キーと関係がありますか?
NHProf は、両方のエンティティが sql によってクエリされていることを示していますが、何らかの理由で結果がリンクされていません:-/
ここにいくつかのコードがあります:
public class Employee : User
{
public virtual string firstname { get; set; }
public virtual string lastname { get; set; }
public virtual string uid { get; set; }
public virtual string identity_provider
public virtual IList<Language> languages { get; set; }
}
対応するマッピング:
public class EmployeeMap : ClassMap<Employee>
{
public EmployeeMap()
{
Table("employee");
Not.LazyLoad();
CompositeId()
.KeyProperty(x => x.uid)
.KeyProperty(x => x.identity_provider);
Map(x => x.firstname);
Map(x => x.lastname);
HasMany<Language>(x => x.languages)
.Table("employee_spoken_language")
.KeyColumns.Add("employee_uid","employee_identity_provider")
.Inverse().Cascade.All();
}
}
そして完全を期すために、これは「言語」がどのようにマッピングされるかです:
public class LanguageMap : ClassMap<SpokenLanguage>
{
public LanguageMap()
{
Table("employee_spoken_language");
Not.LazyLoad();
CompositeId()
.KeyProperty(x => x.employee_uid)
.KeyProperty(x => x.employee_identity_provider)
.KeyProperty(x => x.name);
References(x => x.knowledge_level).Column("knowledge_level");
}
}
何を変更しても、従業員エンティティは常に表示されますlanguage = {}
!? これは本当に私を夢中にさせており、エラーを見つけることができません。言語を照会するためのSQLが実行されることを確認しました! データがデータベースにあることを確認しました。また、流暢を使用しているため、作成された hmb も確認しました。
<bag cascade="all" inverse="true" name="languages" table="employee_spoken_language">
<key>
<column name="employee_uid" />
<column name="employee_identity_provider" />
</key>
<one-to-many class="Jobportal.Language, wcf, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</bag>
うまくいけば、誰かがこれに光をもたらすことができます...前もって感謝します!
よろしく、マーティン