ในที่สุดฉันก็พบวิธีแก้ปัญหาที่ยอดเยี่ยม (โดยใช้ตัวกรอง) เนื่องจาก Castle AR ไม่มี API ดั้งเดิมสำหรับการแมปกับตัวกรอง NHibernate ส่วนนี้จึงค่อนข้างไม่มีเอกสาร ดังนั้นที่นี่ไป
ตัวกรองตัวอย่างนี้จะทำให้แน่ใจว่าคุณจะไม่ได้รับข่าวสารเกินหนึ่งปี ไม่ว่าคุณจะใช้แบบสอบถามประเภทใดใน ActiveRecord คุณอาจนึกถึงการใช้งานที่เป็นประโยชน์มากกว่านี้สำหรับสิ่งนี้
ขั้นแรก สร้าง 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() ฯลฯ จะไม่แตะต้องรายการที่มีอายุเกินหนึ่งปี
person
mbp
schedule
03.09.2009