Je crée un site de commerce électronique à l'aide de l'architecture S # arp. J'essaie de mapper une hiérarchie de catégories et de récupérer les catégories de niveau supérieur. J'utilise NHibernate.Linq pour cela. J'ai l'entité suivante:NHibernate.Linq compte NHibernate.QueryException: impossible de résoudre la propriété
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>();
}
}
avec la mise en correspondance Fluent NHibernate suivante:
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();
}
}
Je veux récupérer les catégories racine. Je sais que j'ai huit dans ma db donc voici mon test:
[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());
}
Je me dis que je viens d'obtenir toutes les catégories où la liste ParentCategories est vide (initialisées dans le cteur de la catégorie). Alors, voici ma méthode dépôt:
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;
}
Quand je lance mon test je reçois « NHibernate.QueryException: ne pouvait pas résoudre la propriété: ParentCategories.Id de: MyStore.Core.Category »
Qu'est-ce que je fais mal ?
Voici des questions connexes, mais ne résout pas tout à fait mon problème:
Fluent nHibernate: Need help with ManyToMany Self-referencing mapping
Querying a self referencing join with NHibernate Linq
Fluent NHibernate: ManyToMany Self-referencing mapping
Edit:
Je pense que le problème est lié à la .count dans l'expression Linq. This post liés à cela, mais je ne suis pas sûr de savoir comment progresser ...
Salut Jon. Je reçois toujours un échec avec la même erreur msg quand j'utilise: var categories = session.Linq() .Where (c => c.ParentCategories.Count() == 0) .ToList(); (... hâte de Sharp Arch 2 :) –
autonomatt
Ne fonctionne pas pour moi non plus ... – Cocowalla