在我以前的应用程序中,我已成功使用Paul Van Bladel's方法设置审计跟踪。他的方法很完美,非常容易理解。但是,他只使用一个表来存储审计记录。我需要做类似的事情,除了我需要为每个将被审计的表格有一个审计表,大约是7-8个表。如果我能弄清楚如何传递通用表格对象,我可以回避Paul Van Bladel的解决方案。是否有人知道在线我可以参考的任何其他例子?或者有关如何正确实现多个表的审计跟踪的任何建议。
p.s我尝试使用Beth Massi's示例,但似乎并不打算在VS2012 Lightswitch中使用它,因为它没有开箱即用?
答案 0 :(得分:0)
您的问题非常广泛,可能过于宽泛。从我收集的内容来看,虽然你有几张桌子,但很可能有不同的栏目。您正在寻找一种通用的方法,只需根据列编写适当的内容而无需太多的代码重现。
你能做什么和应该做什么:
这通常可以帮助我确定应该抽象内容的程度。此特定示例可能受益于控制反转或依赖注入。这样,您可以将特定审计注入特定的类。
public interface IAudit<T>
{
void WriteToAudit(<T> model);
}
因此,此特定的接口将实现 Generic ,它应代表您的审计数据模型。这可以提供多种差异化模型,以更好地满足您的需求,同时提供灵活性。
现在您需要编写继承接口的实现类。
public class Inventory : IAudit<InventoryModel>
{
public void WriteToAudit(InventoryModel model)
{
// Write your database content, then pass *Properties* from the model.
// Which will write for this particular table.
}
}
现在这种方法的有力部分:
public class Stuff
{
private IAudit audit;
public void DoSomething(model)
{
audit.WriteToAudit(model);
}
}
所以现在你基本上可以创建一个新的IAudit
,然后你可以通过几种方法传递:
这是一个非常粗略的实现,我可能有几个错别字。这是一个快速的帖子,但希望这可以指出你正确的方向。关于此事的更多细节可以在here找到。
答案 1 :(得分:0)
您可以考虑的一个选项是更新表结构,以提供行版本控制作为外部审计表的替代方法。当您需要完整的审计跟踪和执行数据沿袭分析的能力时,此模式非常有用。报告的另一个好处是 - 您可以在给定时间点查询给定记录的状态 - 非常有助于创建事实表或在缓慢变化的维度上保留状态。我首选的方法是使用符合SCD Type 2模式的东西。 (有关一般概念,请参阅here。)
对于实现此模式的每个表,修改默认查询以仅返回活动记录 - 即DateTo IS NULL的过滤器。然后,您需要做的就是截取删除和更新的标准CRUD事件,如下所示: Table_Updating():
<强> Table_Deleting():强>
<强> Table_Inserting():强>
就是这样。