j'ai un ensemble d'entités qui mettent en œuvre une interface:problèmes de filtrage des entités d'une cartographie NHibernate avec un IInterceptor
public interface ILocalised
{
Culture Culture { get; }
}
Pour beaucoup de raisons complexes dont j'ai besoin de filtrer les entités qui n'ont pas après la culture correcte sont renvoyés de la base de données (ie je ne peux pas utiliser un filtre). Ma pensée immédiate était de créer un intercepteur qui filtrerait toutes les entités qui n'avaient pas la culture correcte, par ex.
public class LocalisationInterceptor : EmptyInterceptor
{
public override object Instantiate(string clazz, NHibernate.EntityMode entityMode, object id)
{
var entity = base.Instantiate(clazz, entityMode, id); //Returns null already
if ((entity is ILocalised) && false == IsValidCulture((ILocalised)entity))
{
return null;
}
return base.Instantiate(clazz, entityMode, id);
}
public override bool OnLoad(object entity, object id, object[] state, string[] propertyNames, NHibernate.Type.IType[] types)
{
if((entity is ILocalised) && false == IsValidCulture((ILocalised)entity))
{
entity = null;
return false;
}
return base.OnLoad(entity, id, state, propertyNames, types);
}
private bool IsValidCulture(ILocalised localisedEntity)
{
return localisedEntity.Culture == Culture.En;
}
}
Toutefois, jusqu'à maintenant, quelle que soit la méthode que j'essaie de remplacer, elle retournera toujours l'entité.
Est-ce que quelqu'un a des idées pour empêcher le chargement de certaines entités dans un intercepteur ou dans d'autres solutions?