Fluent NHibernate:不带外键的映射属性
本文关键字:映射 属性 NHibernate Fluent | 更新日期: 2023-09-27 17:57:24
我有两个类:
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的最年长(按出生日期排序)子项。
数据库中的父项和子项之间没有外键。
(我不想使用两个不同的存储库,我想要映射中的功能)
属性引用是我可以使用的东西吗?
一种策略是对子项集合强制执行预先加载,并创建另一个属性来获取年龄最大的子项。
属性引用用于使用非主键的列连接到另一个表。
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();
}
}
另一种可能性是将一列添加到父表 (OldestChild_FK),然后从 Children 表中联接该行。
我认为您要做的是在父级上创建一个名为 OldestChild 的属性或最年长的子项列表并忽略该属性并编写一些自定义查询(HQL 或 SQL)以返回您想要的结果。
这里有一个关于忽略FluentNhibernate属性的线程。