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

时间:2011-05-24 07:47:26

标签: c# fluent-nhibernate mapping

我有这两个类:

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排序)子项。

数据库中的父级和子级之间没有外键。

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

属性引用是否可以使用?

2 个答案:

答案 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属性的一个主题。