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();
}
}