在我之前的应用程序中,我已经使用Paul Van Bladel's方法成功地设置了审计跟踪。他的方法工作得很完美,而且非常容易效仿。但是,他只使用一个表来存储审计过的记录。我需要做一些类似的事情,除了我需要有一个审核表,每个表,这是大约7-8表将被审计。如果我知道如何传递泛型表对象,我可能会引用Paul Van Bladel的解决方案。有没有人知道网上有没有其他我可以参考的例子?或者关于如何正确实现多个表的审计跟踪的任何建议。
附注:我试过使用Beth Massi's示例,但它似乎不打算在VS2012 Lightswitch中使用,因为它不能开箱即用?
发布于 2014-10-18 02:17:57
你的问题非常宽泛,可能太宽泛了。从我收集的数据来看,您有几个表,很可能包含不同的列。你正在寻找一种通用的方法,简单地根据专栏编写适当的内容,而不需要过多的代码重现。
你可以和应该做的事情:
写出那些tables.
这通常帮助我确定内容应该抽象到什么程度。这个特定的例子可能会从控制反转或依赖注入中受益。通过这种方式,您可以将特定的审计注入特定的类。
public interface IAudit<T>
{
void WriteToAudit(<T> model);
}因此,这个特定的接口将实现一个泛型,它应该表示您的审计数据模型。它可以提供几种不同的模型,以更好地满足您的需求,同时提供灵活性。
现在,您需要编写继承接口的实现类。
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,然后你可以通过几种方法传递is:
这是一个令人难以置信的粗糙的实现,我可能有几个打字错误。这篇文章写得很快,但希望这篇文章能为你指明正确的方向。关于这个问题的更多细节可以在here上找到。
发布于 2014-10-18 19:04:34
您可以考虑的一种选择是更新表结构,以提供行版本控制作为外部审计表的替代方案。当您需要完整的审计跟踪和执行数据沿袭分析的能力时,此模式非常有用。这样做的另一个好处是报告-您可以询问给定记录在给定时间点的状态-对于创建事实表或保留缓慢变化的维度的状态非常有用。我的首选方法是使用类似于SCD Type2模式的东西。(有关一般概念,请参阅here。)
对于您在其上实现此模式的每个表,修改默认查询以仅返回活动记录-即filter For DateTo为NULL。然后,您需要做的就是截获删除和更新的标准CRUD事件,如下所示:Table_Updating():
changes
Table_Deleting():
Table_Inserting():
就这样。
https://stackoverflow.com/questions/26430476
复制相似问题