亲爱的 NHibernate 用户,
我已经尝试、阅读和诸如此类的 2 天了,但仍然无法弄清楚这一点,即使我认为使用 QueryOver API 是一件容易的事。
这是我的两个实体:
ATTRIBUTE
---------------------------
public int Id { get; set; }
public int LanguageId { get; set; }
public string Title { get; set; }
public IList<Option> Options { get; set; }
OPTION
---------------------------
public int Id { get; set; }
public Attribute Attribute { get; set; }
public int LanguageId { get; set; }
public string Title { get; set; }
映射如下:
<class name="Attribute" lazy="false" table="attribute" dynamic-insert="true" dynamic-update="true" select-before-update="true">
<id name="Id" column="attribute_id" type="System.Int32">
<generator class="native"/>
</id>
<bag name="Options" lazy="false" cascade="all">
<key column="attribute_id" not-null="true" />
<one-to-many class="Option" not-found="ignore" />
</bag>
<join table="attribute_i18n" inverse="true" fetch="join">
<key column="attribute_id" not-null="true"/>
<property name="LanguageId" column="language_id" type="System.Int32" not-null="true" />
<property name="Title" column="title" type="System.String" length="255" not-null="true" />
</join>
</class>
<class name="Option" lazy="false" table="options" dynamic-insert="true" dynamic-update="true" select-before-update="true">
<id name="Id" column="option_id" type="System.Int32">
<generator class="native"/>
</id>
<many-to-one name="Attribute" class="Attribute" column="attribute_id" not-null="true" />
<join table="option_i18n" inverse="true" fetch="join">
<key column="option_id" not-null="true"/>
<property name="LanguageId" column="language_id" type="System.Int32" not-null="true" />
<property name="Title" column="title" type="System.String" length="255" not-null="true" />
</join>
</class>
请注意,这两个表都连接到其自己的“i18n”表(支持多语言条目),并参考其 language_id 列。
此外,我尝试使用 QueryOver API,并在 Options-property 中查询 LanguageId 设置为 1 的选项。
在拉了很多头发之后,我的查询又回到了我开始的地方:
Attribute attribute = null;
Option option = null;
result = Session.QueryOver(() => attribute)
.Where(() => attribute.LanguageId == 1)
.Left.JoinAlias(i => i.Options, () => option)
.Where(() => option.LanguageId == 1)
.TransformUsing(Transformers.DistinctRootEntity)
.List();
所以,对于我的问题:这个查询一直在我的选项列表中给我一组选项(对于 language_id 1 和 2)。我只想选择 language_id = 1,但令我沮丧的是,API 不理解我(.. 还是反过来?)。
非常感谢任何有关如何使我的查询对我的 OPTION 包集合起作用的帮助!:-) 谢谢!
米卡尔