NHibernate.Linq计数引发NHibernate.QueryException:无法解析属性

NHibernate.Linq计数引发NHibernate.QueryException:无法解析属性,nhibernate,fluent-nhibernate,many-to-many,linq-to-nhibernate,s#arp-architecture,Nhibernate,Fluent Nhibernate,Many To Many,Linq To Nhibernate,S#arp Architecture,我正在使用Sarp架构构建一个电子商务网站。 我正在尝试映射一个类别层次结构并检索顶级类别。 我用的是NHibernate.Linq。 我拥有以下实体: public class Category : Entity { #region Properties [DomainSignature] [NotNullNotEmpty] public virtual string Name { get; set; } public virtual string De

我正在使用Sarp架构构建一个电子商务网站。 我正在尝试映射一个类别层次结构并检索顶级类别。 我用的是NHibernate.Linq。 我拥有以下实体:

public class Category : Entity
{
    #region Properties
    [DomainSignature]
    [NotNullNotEmpty]
    public virtual string Name { get; set; }
    public virtual string Description { get; set; }
    public virtual int ListOrder { get; set; }

    public virtual IList<Product> Products { get; set; }
    public virtual IList<Category> ParentCategories { get; set; }
    public virtual IList<Category> ChildCategories { get; set; }
    #endregion

    public Category()
    {
        Products = new List<Product>();
        ParentCategories = new List<Category>();
        ChildCategories = new List<Category>();
    }
}
我想我只是得到ParentCategories列表为空的所有类别,并在Category的ctor中初始化。下面是我的存储库方法:

public IQueryable<Category> GetRootCategories()
{
    var session = NHibernateSession.Current;

    // using NHibernate.Linq here
    var categories = from c in session.Linq<Category>()
                     where c.ParentCategories.Count == 0
                     select c;
    return categories;
}
当我运行测试时,我得到NHibernate.QueryException:无法解析属性:ParentCategories.Id:MyStore.Core.Category

我做错了什么

以下是相关问题,但并没有完全解决我的问题:

编辑:


我认为问题在于Linq表达式中的.count。与此相关,但我不确定如何进行…

明白了。问题出在linq表达式中。它不喜欢,因为某种原因。这可能是NHibernate.linqNH2中的一个bug,但我听说NH3Linq现在已经坚如磐石了

无论如何,我的解决方案是使用标准:

var categories=session.CreateCriteriatypeof categority .AddRestrictions.IsEmptyParentCategories .名单


多亏了a,让我走上了正轨。再次显示为绿色。

您应该使用Count扩展方法,而不是Count属性。这在NHibernate 2中工作良好

问候
乔恩

你好,乔恩。当我使用:var categories=session.Linq.Wherec=>c.ParentCategories.Count==0.ToList;时,我仍然会收到一个失败的错误消息。。。期待夏普拱门2:
[Test]
public void Can_get_root_categories()
{
    // Arrange
    var repository = new CategoryRepository();

    // Act
    var rootCategories = repository.GetRootCategories();

    // Assert
    Assert.IsNotNull(rootCategories);
    Assert.AreEqual(8, rootCategories.Count());
}
public IQueryable<Category> GetRootCategories()
{
    var session = NHibernateSession.Current;

    // using NHibernate.Linq here
    var categories = from c in session.Linq<Category>()
                     where c.ParentCategories.Count == 0
                     select c;
    return categories;
}