我正在尝试创建一个Criteria查询来选择通过关联表相关的对象。
Insurer * - 1 Insurer_Section 1 - * Section
InsurerSection具有关联属性:active:bool。
如何将InsurerSection类中的活动属性设置为true的所有保险公司?
PS:我不能这样:Insurer.FindAll(
DetachedCriteria.For<Insurer>().CreateCriteria("Insurer_Section").Add(Expression.Eq("Active", true)
);
因为Insurer_Section是一个仅通过HasAndBelongsToMany映射的关联表:
[HasAndBelongsToMany(typeof(Section), Table = "`Insurer_Section`",
ColumnKey = "`IdInsurer`", ColumnRef = "`IdSection`",
Cascade = ManyRelationCascadeEnum.AllDeleteOrphan)]
private IList<Section> Sections {
get { return this.sections; }
set { this.sections = value; }
}
和
[HasAndBelongsToMany(typeof(Insurer), Table = "`Insurer_Section`",
ColumnKey = "`IdSection`", ColumnRef = "`IdInsurer`",
Cascade = ManyRelationCascadeEnum.None, Inverse = true)]
public IList<Insurer> Insurers {
get { return this.insurers; }
set { this.insurers = value; }
}
答案 0 :(得分:2)
您不能这样做,如果您的关联表具有您需要的属性,您必须将关联映射为一对多(对于Insurer_Section的新enity),然后具有多对一关系 与部分的关系。
当关联表不仅仅是主键和可能的索引列时,您需要将关联表映射为链接两个实体的单独实体(保险公司和部分以及关联信息,如IsActive)< / p>
答案 1 :(得分:0)
Torkel是对的。您不仅需要创建新的链接实体,还需要将每个实体的集合更改为新链接实体的集合。然后根据需要更改映射。