我有这两个类:
public class Parent
{
public virtual string Name { get; set; }
public virtual string Family_id { get; set; }
}
public class Children
{
public virtual string Name { get; set; }
public virtual DateTime BirthDate { get; set; }
public virtual string Family_id { get; set; }
}
当我获取父项时,我还想获取与父项具有相同Family_id的最旧(由BirthDate排序)子项。
数据库中的父级和子级之间没有外键。
(我不想使用两个不同的存储库,我想要映射中的功能)
属性引用是否可以使用?
答案 0 :(得分:2)
一种策略是在子集合上强制执行Eager Load,并创建另一个属性以获取最大的孩子。
Property-Ref用于使用不是主键的列连接到另一个表。
public class Parent
{
public virtual int Id {get; set;}
public virtual string Name { get; set; }
public virtual string Family_id { get; set; }
public virtual Children OldestChild {
get {
return Children.OrderBy(x=>x.BirthDate).FirstOrDefault();
}}
public virtual IList<Children> Children {get; set;}
}
public class ParentMap : ClassMap<Parent>{
public ParentMap(){
Id(x=>x.Id);
Map(x=>x.Name);
HasMany(x=>x.Children).PropertyRef("Family_id").Fetch.Join();
}
}
另一种可能性是将一个列添加到Parent表(OldestChild_FK),然后从Children表中加入该行。
答案 1 :(得分:1)
我认为您要做的是在Parent上创建一个名为OldestChild的属性或一个最旧子列表,并忽略该属性并编写一些自定义查询(HQL或SQL)以返回您想要的结果。
Here是忽略FluentNhibernate属性的一个主题。