观察员与触发器
回答
我使用触发器,但触发器通常是特定于数据库的。如果你打算支持多个数据库服务器,当然可以找到一种方法来代码。如果您确定您将使用特定的数据库服务器,那么您的数据完整性将会爱上您的触发器。
触发器需要非常非常少用。当一个INSERT可能导致数十个触发器和数百行代码级联时,这是一个难以维护的危险情况。你决定不使用触发器的地方越多,你就越好。 把它放在crud包 – 2008-11-21 05:24:15
因为我们使用LINQ2SQL这个任务很容易被创建覆盖SubmitChanges()方法。我们的主要目标是在我们的表格中进行审计。该代码将是这样的:
/// <summary>
/// Sends changes that were made to retrieved objects to the underlying database,
/// and specifies the action to be taken if the submission fails.
/// NOTE: Handling this event to easily perform Audit tasks whenever a table gets updated.
/// </summary>
/// <param name="failureMode">The action to be taken if the submission fails.
/// Valid arguments are as follows:<see cref="F:System.Data.Linq.ConflictMode.FailOnFirstConflict"/>
/// <see cref="F:System.Data.Linq.ConflictMode.ContinueOnConflict"/></param>
public override void SubmitChanges(System.Data.Linq.ConflictMode failureMode)
{
//Updates
for (int changeCounter = 0; changeCounter < this.GetChangeSet().Updates.Count; changeCounter++)
{
object modifiedEntity = this.GetChangeSet().Updates[changeCounter];
SetAuditStamp(this, modifiedEntity, ChangeType.Update);
}
//Inserts
for (int changeCounter = 0; changeCounter < this.GetChangeSet().Inserts.Count; changeCounter++)
{
object modifiedEntity = this.GetChangeSet().Inserts[changeCounter];
SetAuditStamp(this, modifiedEntity, ChangeType.Insert);
}
base.SubmitChanges(failureMode);
我们格外不喜欢使用触发器,因为他们总是隐藏到您DB和它使硬制定出可能出现的问题......与具有进入你的代码只需要开始调试它找出为什么有些事情失败了,例如...
一致认为触发因所提及的原因而发臭。完全不同意审计最好在数据库之外完成。如果您极其严格地执行访问请求,那么任何人都无法获得用户名/密码到您的数据库,那么您有可能有战斗机会。 – 2008-11-21 05:21:41
除非您支持多个DBMS,否则您的框架在未来5年(比如说)比您选择的DBMS更有可能发生变化。此外,未来可能有一些要求支持其他形式的输入,例如,网页或移动设备。将这些操作放入数据库触发器中意味着无论触发它们的应用程序如何,都会执行这些操作。
- 1. 事件观察员 - 触发事件
- 2. 对观察员的观察员观察员是否会发生任何变化?
- 3. AngularJS - 触发$ watch/$观察者
- 4. 观察不会触发
- 5. 手动触发观察值?
- 6. Rxjs观察员
- 7. 布尔属性不触发相关的可观察触发器
- 8. 与Powershell文件观察器不触发总是
- 9. 简单的观察到/观察员rxjs
- 10. KVO观察与NSNotificationCenter观察
- 11. 观察员在AppDelegate的可达性不能触发
- 12. Magento观察员没有被事件触发
- 13. 观察员可以观察多个可观察物吗?
- 14. onClick vs观察员
- 15. magento sales_order_place_after观察员
- 16. Java RMI服务器注册表连接观察器触发器
- 17. Rails观察员没有发射......有时
- 18. 定制观察者未触发
- 19. 观察者和回调未触发accept_nested_attributes_for
- 20. 文件观察家事件触发
- 21. 触发观察到几个毫秒
- 22. 聚合物观察者不会触发
- 23. mongoid观察员与rails-observers rails4
- 24. 与观察员的PHP对象组成?
- 25. 问题与无扩展名观察员
- 26. 斯卡拉监听器/观察员
- 27. Magento触发观察者与自定义orderstatus
- 28. 渲染方法不可触发与可观察数组更新
- 29. 如何在触发器中触发可观察变量的Ajax加载?
- 30. 利用观察员/从rxjs
说出你在答案中使用的框架可能很有意思。 – ewakened 2008-11-21 00:58:58