1

J'ai deux entités (Job et Location) qui sont connectées via une relation many-to-many. Récemment, nous avons mis en place une logique de suppression douce sur l'entité de localisation, puis ajouté un filtre sur la cartographie comme l'emploi ceci:NHibernate - Filtré La relation ManyToMany renvoie des enregistrements NULL

HasManyToMany(x => x.Locations) 
.Table("JobLocation") 
.ParentKeyColumn("JobId") 
.ChildKeyColumn("LocationId") 
.ApplyChildFilter<ExcludeDeletedFilter>("IsDeleted = :condition") 
.Cascade.None(); 

La requête pour les nombreux à-plusieurs ressemble à ce

select ... 
from Job job 
left outer join JobLocation jl 
on jl.JobId = job.Id 
left outer join Location loc 
on loc.Id = jl.LocationId and IsDeleted = 0 

Le problème est que maintenant, lors de l'extraction d'un travail ayant des emplacements supprimés, la collection Locations sur l'entité de travail contient une entrée null pour chaque emplacement supprimé.

Quelle est la meilleure façon de gérer ces enregistrements de suppression logicielle lorsqu'ils sont récupérés via une relation plusieurs-à-plusieurs. (pour un à plusieurs, ce filtre fait du bon travail)

Quelles sont les autres solutions de rechange que je devrais envisager?

+0

Quel type de collection? –

+0

Les emplacements sont définis comme des emplacements IList publics virtuels Emplacements {get; ensemble; } –

Répondre

1

Les éléments d'une liste sont associés à un index. Lorsque persisté en utilisant un mappage de style liste, ces indices seront conservés (les listes ne se réorganisent pas d'elles-mêmes).

Si vous filtrez certains éléments, pour que les éléments visibles aient des positions stables, il doit s'ensuivre des éléments NULL pour les éléments cachés. Envisagez d'utiliser un mappage différent, tel qu'un ensemble, un sac ou une carte.

+0

J'ai défini la liste Emplacements comme ISet et je n'avais pas de null dans la liste. Merci pour l'explication. –

Questions connexes