참조하십시오. 캐슬 AR은 NHibernate 필터에 매핑하기위한 네이티브 API를 가지고 있지 않기 때문에,이 부분은 거의 문서화되지 않았다. 그래서 여기에 간다.
이 예 필터, 당신이 상관없이 당신이 액티브에 사용하는 쿼리의 종류, 년 이상 뉴스 오래된 얻을하지 않습니다 있는지 확인합니다. 당신은 아마 이것에 대한 더 실용적인 응용 프로그램을 생각할 수 있습니다.
먼저 ActiveRecord "뉴스"를 만듭니다.
ActiveRecordStarter를 초기화하기 전에 다음 코드를 사용하십시오.
ActiveRecordStarter.MappingRegisteredInConfiguration += MappingRegisteredInConfiguration;
Castle.ActiveRecord.Framework.InterceptorFactory.Create =() => { return new EnableFiltersInterceptor(); };
그런 다음 누락 된 기능과 클래스를 추가 :
void MappingRegisteredInConfiguration(Castle.ActiveRecord.Framework.ISessionFactoryHolder holder)
{
var cfg = holder.GetConfiguration(typeof (ActiveRecordBase));
var typeParameters = new Dictionary<string, IType>
{
{"AsOfDate", NHibernateUtil.DateTime}
};
cfg.AddFilterDefinition(new FilterDefinition("Latest", "", typeParameters));
var mappings = cfg.CreateMappings(Dialect.GetDialect(cfg.Properties));
var newsMapping = cfg.GetClassMapping(typeof (News));
newsMapping.AddFilter("Latest", ":AsOfDate <= Date");
}
public class EnableFiltersInterceptor : EmptyInterceptor
{
public override void SetSession(ISession session)
{
session.EnableFilter("Latest").SetParameter("AsOfDate", DateTime.Now.AddYears(-1));
}
}
그리고 짜잔를! 뉴스에 대한 질의 (예 : FindAll(), DeleteAll(), FindOne(), Exists() 등은 항목을 1 년 이상 만지지 않습니다.
출처
2009-09-03 21:07:02
mbp
이것은 좋은 해결책 인 것처럼 보이지만 Castle ActiveRecord와 함께이 필터를 사용할 수 있는지는 알 수 없습니다. – mbp
내가이 이제까지 구현 된 생각하지 않는다 http://groups.google.com/group/castle-project-devel/browse_thread/thread/ce94f492615e0d52/c721a7abb0a1f1a7 ... 당신은 현재 ISession를 얻을 수 있고 필터를 가능하게합니다 자신을 –
IIRC 당신은 필터를 사용 ActiveRecordMediator.GetSessionFactoryHolder에서 현재 ISession(). CreateSession (대해서 typeof (ActiveRecordBase)) –