public interface ILocalised
{
Culture Culture { get; }
}由于许多复杂的原因,我需要在从DB返回后过滤那些没有正确区域性的实体(即,我不能使用过滤器)。我的直接想法是创建一个拦截器,它将过滤任何不具有正确区域性的实体,例如
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;
}
}然而,到目前为止,我尝试覆盖它的任何方法都将始终返回实体。
有人知道如何防止某些实体被加载到拦截器或任何其他解决方案中吗?
发布于 2010-11-04 07:44:54
https://stackoverflow.com/questions/4023788
复制相似问题