我正在使用Orchard的Audit Trail模块来跟踪更改内容项。 但是,在我的项目中,我有一些只有记录模型的对象(没有部分模型),我使用Repository.Fetch()
查询和保存它们。在Audit Trail模块中,它覆盖Updating(),Updated()方法以跟踪更改内容项。
我想知道记录存储库是否存在类似内容,因为我还想跟踪仅使用记录模型的对象。
例如:
我有以下型号:InvoicePart,InvoicePartRecord,DetailRecord,ProductPart,ProductPartRecord
发票有很多细节。
详细信息存储Invoice_Id& Product_Id,销售员可以在Invoice中添加更多详细信息,或者从Invoice中删除它,或者更改Detail的Product_Id。
Orchard Audit Trail只能跟踪Invoice&产品,但不是详细信息,因为它不是内容项,因此我无法知道何时创建,修改或删除了详细信息。
答案 0 :(得分:1)
为此,您必须添加从原始存储库继承的新存储库实现,如下所示:
public class MyRepository<T> : Repository<T>, IRepository<T> where T : class
在这里,只要您想跟踪更改,就可以触发事件。 然后,要禁止原始实现,您必须添加新的Autofac Module类:
public class DataModule : Module {
protected override void Load(ContainerBuilder builder) {
builder.RegisterGeneric(typeof(MyRepository<>)).As(typeof(IRepository<>)).InstancePerDependency();
}
}
之后您可以处理这些事件并对其进行审核,您将在Orchard.AuditTrail模块中找到一个包含ContentDefinitionProviders的好示例。
注意:如果要指定启用了审核的记录(如果您不想审核系统中所有记录的所有更改,这很有用),您可以添加新的类属性:
[AttributeUsage(AttributeTargets.Class)]
public sealed class AuditTrailEnabledAttribute : Attribute {
}
然后使用此属性检查记录类是否包含它,并根据它进行审核。