Я создаю сайт электронной торговли, используя архитектуру S # arp. Я пытаюсь отобразить иерархию категорий и получить категории верхнего уровня. Я использую NHibernate.Linq для этого. У меня есть следующий объект:NHibernate.Linq count throws NHibernate.QueryException: не удалось разрешить свойство
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 из: 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
Edit:
Я думаю, что проблема заключается с .count в выражении Linq. This post, связанный с этим, но я не уверен, как продвигаться ...
Привет Джон. Я все еще получаю сбой с той же ошибкой msg, когда я использую: var categories = session.Linq() .Where (c => c.ParentCategories.Count() == 0) .ToList(); (... с нетерпением жду Sharp Arch 2 :) –
autonomatt
Не работает для меня ни ... – Cocowalla