繁体   English   中英

流畅的 NHibernate:Map 属性没有外键?

[英]Fluent NHibernate: Map property without foreign key?

我有这两个类:

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 的最年长(按出生日期排序)的孩子。

数据库中的父子节点之间没有外键。

(我不想使用两个不同的存储库,我想要映射中的功能)

我可以使用 property-ref 吗?

一种策略是在 Children 集合上强制 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();
    }
}

另一种可能性是向父表 (OldestChild_FK) 添加一列,然后从子表中加入该行。

我认为您想要做的是在 Parent 上创建一个名为 OldestChild 的属性或一个 Oldest Children 列表并忽略该属性并编写一些自定义查询(HQL 或 SQL)以返回您想要的结果。

是关于忽略 FluentNhibernate 中的属性的线程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM