Я создаю сайт электронной коммерции, используя S # arp Architecture.Я пытаюсь отобразить иерархию категорий и получить категории верхнего уровня.Я использую 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();
}
}
Я хочу получить корневые категории.Я знаю, что у меня восемь в моей БД, поэтому вот мой тест:
[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»
Чтоя делаю что-то не так?
Здесь приведены связанные вопросы, но я не совсем решил мою проблему:
Свободный nHibernate: Нужна помощь с сопоставлением самообращающихся ссылок ManyToMany
Запрос самоотносительного соединения с помощью NHibernate Linq
Свободное владение NHibernate: ManyToMany Самореферентное сопоставление
Редактировать:
Я думаю, что проблема заключается в .count в выражении Linq. Этот пост связан с этим, но я не уверен, как прогрессировать ...