Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有propertyref和conditions的相同类型的Fluent NHibernate映射集合_C#_Fluent Nhibernate - Fatal编程技术网

C# 具有propertyref和conditions的相同类型的Fluent NHibernate映射集合

C# 具有propertyref和conditions的相同类型的Fluent NHibernate映射集合,c#,fluent-nhibernate,C#,Fluent Nhibernate,假设我有一门课: public class Person { public DateTime DateOfBirth { get; set; } public string Name { get; set; } public Person Parent { get { return Session.QueryOver<Person>().Where(x =

假设我有一门课:

public class Person
{
      public DateTime DateOfBirth { get; set; }
      public string Name { get; set; }
      public Person Parent 
      {
            get
            {
                return Session.QueryOver<Person>().Where(x => 
                               x.FamilyId == FamilyId && 
                               x.FamilyJoinOrder == null
                       ).SingleOrDefault();
            }
      }
      public IList<Person> Children { get; set; }
      public int? FamilyId { get; set; }
      public int? FamilyJoinOrder { get; set; }
 }
我的问题是儿童收藏不起作用,它总是空的

为了澄清这些条件,以下是:

  • FamilyId与所有族成员相同(但数据库中不存在族表)
  • 子项:FamilyJoinOrder>0
  • 父项:FamilyJoinOrder为空
  • 子集合只能是只读的
  • 在现实生活中,复合id有更多字段,“不能”用作父项的外键
如何绘制孩子们的地图,使其实际工作?
甚至可能吗?

为什么您的实体可以访问会话?我认为这是一个非常糟糕的做法。哦,对不起,我忘了提到这只是伪代码,会话变量实际上来自当前主体的身份。我猜父级也可以映射到实际的映射类中..乍一看它看起来还可以。您是否查看了为查询生成的sql?您可以使用来实现这一点。你应该从中获得足够的信息,看看哪里出了问题。
public class PersonMap
{
    public PersonMap()
    {
        CompositeId()
            .KeyProperty(x => x.DateOfBirth)
            .KeyProperty(x => x.Name);

        Map(x => x.FamilyId).Nullable();
        Map(x => x.FamilyJoinOrder).Nullable();

        HasMany(x => x.Children)
             .Table("Person")
             .PropertyRef("FamilyId")
             .Where("FamilyJoinOrder > 0")
             .ReadOnly()
             .Fetch.Subselect();
    }
}