【发布时间】:2010-09-23 14:42:41
【问题描述】:
我正在使用 S#arp 架构构建电子商务网站。 我正在尝试映射类别的层次结构并检索顶级类别。 我为此使用 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>();
}
}
使用以下 Fluent NHibernate 映射:
public class CategoryMap : ClassMap<Category>
{
public CategoryMap()
{
Id(x => x.Id);
Map(x => x.Name);
HasManyToMany(p => p.Products)
.Cascade.All()
.Table("CategoryProduct");
HasManyToMany(c => c.ParentCategories)
.Table("CategoryHierarchy")
.ParentKeyColumn("Child")
.ChildKeyColumn("Parent")
.Cascade.SaveUpdate()
.AsBag();
HasManyToMany(c => c.ChildCategories)
.Table("CategoryHierarchy")
.ParentKeyColumn("Parent")
.ChildKeyColumn("Child")
.Cascade.SaveUpdate()
.Inverse()
.LazyLoad()
.AsBag();
}
}
我想检索根类别。我知道我的数据库中有 8 个,所以这是我的测试:
[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());
}
我想我只是得到 ParentCategories 列表为空的所有类别(在类别的 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 of: MyStore.Core.Category”
我做错了什么?
以下是相关问题,但并没有完全解决我的问题:
Fluent nHibernate: Need help with ManyToMany Self-referencing mapping
Querying a self referencing join with NHibernate Linq
Fluent NHibernate: ManyToMany Self-referencing mapping
编辑:
我认为问题出在 Linq 表达式中的 .count 上。 This post 与此相关,但我不知道如何进行......
【问题讨论】:
标签: nhibernate fluent-nhibernate many-to-many linq-to-nhibernate s#arp-architecture